In [1]:
%reload_ext autoreload
%autoreload 2
%matplotlib inline

In [2]:
from fastai.imports import *
from fastai.torch_imports import *
from fastai.transforms import *
from fastai.conv_learner import *
from fastai.model import *
from fastai.dataset import *
from fastai.sgdr import *
from fastai.plots import *


/home/dex/anaconda3/lib/python3.6/site-packages/sklearn/ensemble/weight_boosting.py:29: DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release.
  from numpy.core.umath_tests import inner1d

In [3]:
torch.cuda.set_device(0)

Kaggle Dog Breed Identification. Get data from https://www.kaggle.com/c/dog-breed-identification


In [8]:
PATH = "data/dogbreed/"
sz = 224
arch = resnext101_64
bs = 58

In [9]:
label_csv = f'{PATH}labels.csv'
n = len(list(open(label_csv))) - 1 # header is not counted (-1)
val_idxs = get_cv_idxs(n) # random 20% data for validation set

In [10]:
n


Out[10]:
10222

In [11]:
len(val_idxs)


Out[11]:
2044

In [8]:
# If you haven't downloaded weights.tgz yet, download the file.
#     http://forums.fast.ai/t/error-when-trying-to-use-resnext50/7555
#     http://forums.fast.ai/t/lesson-2-in-class-discussion/7452/222
#!wget -O fastai/weights.tgz http://files.fast.ai/models/weights.tgz

#!tar xvfz fastai/weights.tgz -C fastai

Initial exploration


In [13]:
!ls {PATH}


labels.csv  sample_submission.csv  test.zip  train.zip

In [14]:
label_df = pd.read_csv(label_csv)

In [15]:
label_df.head()


Out[15]:
id breed
0 000bec180eb18c7604dcecc8fe0dba07 boston_bull
1 001513dfcb2ffafc82cccf4d8bbaba97 dingo
2 001cdf01b096e06d78e9e5112d419397 pekinese
3 00214f311d5d2247d5dfe4fe24b2303d bluetick
4 0021f9ceb3235effd7fcde7f7538ed62 golden_retriever

In [16]:
label_df.pivot_table(index="breed", aggfunc=len).sort_values('id', ascending=False)


Out[16]:
id
breed
scottish_deerhound 126
maltese_dog 117
afghan_hound 116
entlebucher 115
bernese_mountain_dog 114
shih-tzu 112
great_pyrenees 111
pomeranian 111
basenji 110
samoyed 109
airedale 107
tibetan_terrier 107
leonberg 106
cairn 106
beagle 105
japanese_spaniel 105
australian_terrier 102
blenheim_spaniel 102
miniature_pinscher 102
irish_wolfhound 101
lakeland_terrier 99
saluki 99
papillon 96
whippet 95
siberian_husky 95
norwegian_elkhound 95
pug 94
chow 93
italian_greyhound 92
pembroke 92
... ...
german_short-haired_pointer 75
boxer 75
bull_mastiff 75
borzoi 75
pekinese 75
cocker_spaniel 74
american_staffordshire_terrier 74
doberman 74
brittany_spaniel 73
malinois 73
standard_schnauzer 72
flat-coated_retriever 72
redbone 72
border_collie 72
curly-coated_retriever 72
kuvasz 71
chihuahua 71
soft-coated_wheaten_terrier 71
french_bulldog 70
vizsla 70
tibetan_mastiff 69
german_shepherd 69
giant_schnauzer 69
walker_hound 69
otterhound 69
golden_retriever 67
brabancon_griffon 67
komondor 67
briard 66
eskimo_dog 66

120 rows × 1 columns


In [17]:
transforms_side_on


Out[17]:
[<fastai.transforms.RandomRotate at 0x7f95377979b0>,
 <fastai.transforms.RandomLighting at 0x7f9537797a20>,
 <fastai.transforms.RandomFlip at 0x7f9537797a58>]

In [19]:
tfms = tfms_from_model(arch, sz, aug_tfms=transforms_side_on, max_zoom=1.1)
data = ImageClassifierData.from_csv(PATH, 'train', f'{PATH}labels.csv', test_name='test', # we need to specify where the test set is if you want to submit to Kaggle competitions
                                   val_idxs=val_idxs, suffix='.jpg', tfms=tfms, bs=bs)

In [20]:
fn = PATH + data.trn_ds.fnames[0]; fn


Out[20]:
'data/dogbreed/train/001513dfcb2ffafc82cccf4d8bbaba97.jpg'

In [21]:
img = PIL.Image.open(fn); img


Out[21]:

In [22]:
img.size


Out[22]:
(500, 375)

In [23]:
size_d = {k: PIL.Image.open(PATH + k).size for k in data.trn_ds.fnames}

In [24]:
row_sz, col_sz = list(zip(*size_d.values()))

In [25]:
row_sz = np.array(row_sz); col_sz = np.array(col_sz)

In [26]:
row_sz[:5]


Out[26]:
array([500, 500, 500, 500, 500])

In [27]:
plt.hist(row_sz);



In [28]:
plt.hist(row_sz[row_sz < 1000])


Out[28]:
(array([ 135.,  592., 1347., 1164., 4599.,  128.,   76.,   62.,   14.,   11.]),
 array([ 97. , 185.5, 274. , 362.5, 451. , 539.5, 628. , 716.5, 805. , 893.5, 982. ]),
 <a list of 10 Patch objects>)

In [29]:
plt.hist(col_sz);



In [24]:
plt.hist(col_sz[col_sz < 1000])


Out[24]:
(array([ 235.,  733., 2205., 2979., 1807.,   98.,   27.,   33.,    7.,   10.]),
 array([102., 190., 278., 366., 454., 542., 630., 718., 806., 894., 982.]),
 <a list of 10 Patch objects>)

In [30]:
len(data.trn_ds), len(data.test_ds)


Out[30]:
(8178, 10357)

In [31]:
len(data.classes), data.classes[:5]


Out[31]:
(120,
 ['affenpinscher',
  'afghan_hound',
  'african_hunting_dog',
  'airedale',
  'american_staffordshire_terrier'])

Initial model


In [32]:
def get_data(sz, bs): # sz: image size, bs: batch size
    tmfs = tfms_from_model(arch, sz, aug_tfms=transforms_side_on, max_zoom=1.1)
    data = ImageClassifierData.from_csv(PATH, 'train', f'{PATH}labels.csv', test_name='test',
                                       val_idxs=val_idxs, suffix='.jpg', tfms=tfms, bs=bs)
    
    # http://forums.fast.ai/t/how-to-train-on-the-full-dataset-using-imageclassifierdata-from-csv/7761/13
    # http://forums.fast.ai/t/how-to-train-on-the-full-dataset-using-imageclassifierdata-from-csv/7761/37
    return data if sz > 300 else data.resize(340, 'tmp') # Reading the jpgs and resizing is slow for big images, so resizing them all to 340 first saves time

#Source:   
#    def resize(self, targ, new_path):
#        new_ds = []
#        dls = [self.trn_dl,self.val_dl,self.fix_dl,self.aug_dl]
#        if self.test_dl: dls += [self.test_dl, self.test_aug_dl]
#        else: dls += [None,None]
#        t = tqdm_notebook(dls)
#        for dl in t: new_ds.append(self.resized(dl, targ, new_path))
#        t.close()
#        return self.__class__(new_ds[0].path, new_ds, self.bs, self.num_workers, self.classes)
#File:      ~/fastai/courses/dl1/fastai/dataset.py

Precompute


In [33]:
data = get_data(sz, bs)


                                                      

In [36]:
learn = ConvLearner.pretrained(arch, data, precompute=True)


100%|██████████| 141/141 [01:16<00:00,  1.83it/s]
100%|██████████| 36/36 [00:19<00:00,  1.88it/s]
100%|██████████| 179/179 [01:36<00:00,  1.86it/s]

In [37]:
learn.fit(1e-2, 5)


epoch      trn_loss   val_loss   accuracy                    
    0      0.939625   0.393807   0.903131  
    1      0.4345     0.296288   0.918297                     
    2      0.305521   0.271811   0.924168                     
    3      0.227897   0.256732   0.926125                     
    4      0.189524   0.253596   0.918787                     

Out[37]:
[array([0.2536]), 0.9187866982415231]

Question: Difference between precompute=True and unfreeze?

1) We started with a pre-trained network

2) We added a couple of layers on the end of it which start out random. With everything frozen and precompute=True, all we are learning is the layers we have added

3) With precompute=True, data augmentation does not do anything because we are showing exactly the same activations each time

3) We then set precompute=False which means we are still only training the layers we added because it is frozen but data augmentation is now working because it is actually going through and recalculating all of the activations from scratch

4) Then finally, we unfreeze which is saying “okay, now you can go ahead and change all of these earlier convolutional filters”

Augment


In [38]:
from sklearn import metrics

In [39]:
data = get_data(sz, bs)




In [40]:
learn = ConvLearner.pretrained(arch, data, precompute=True, ps=0.5)

In [41]:
learn.fit(1e-2, 2)


epoch      trn_loss   val_loss   accuracy                    
    0      1.13243    0.416081   0.902642  
    1      0.518822   0.302069   0.910959                     

Out[41]:
[array([0.30207]), 0.9109589053926636]

In [42]:
learn.precompute = False

In [43]:
learn.fit(1e-2, 5, cycle_len=1)


epoch      trn_loss   val_loss   accuracy                    
    0      0.447369   0.278774   0.919276  
    1      0.425631   0.264764   0.920254                    
    2      0.380799   0.250937   0.922211                    
    3      0.345284   0.245917   0.921233                    
    4      0.334108   0.242873   0.925147                    

Out[43]:
[array([0.24287]), 0.9251467723202565]

In [44]:
learn.save('224_pre')

In [45]:
learn.load('224_pre')

Increase size


In [46]:
# Starting training on small images for a few epochs, then switching to bigger images, and continuing training is an amazingly effective way to avoid overfitting.

# http://forums.fast.ai/t/planet-classification-challenge/7824/96
# set_data doesn’t change the model at all. It just gives it new data to train with.
learn.set_data(get_data(299, bs)) 
learn.freeze()

#Source:   
#    def set_data(self, data, precompute=False):
#        super().set_data(data)
#        if precompute:
#            self.unfreeze()
#            self.save_fc1()
#            self.freeze()
#            self.precompute = True
#        else:
#            self.freeze()
#File:      ~/fastai/courses/dl1/fastai/conv_learner.py




In [47]:
learn.summary()


Out[47]:
OrderedDict([('Conv2d-1',
              OrderedDict([('input_shape', [-1, 3, 224, 224]),
                           ('output_shape', [-1, 64, 112, 112]),
                           ('trainable', False),
                           ('nb_params', 9408)])),
             ('BatchNorm2d-2',
              OrderedDict([('input_shape', [-1, 64, 112, 112]),
                           ('output_shape', [-1, 64, 112, 112]),
                           ('trainable', False),
                           ('nb_params', 128)])),
             ('ReLU-3',
              OrderedDict([('input_shape', [-1, 64, 112, 112]),
                           ('output_shape', [-1, 64, 112, 112]),
                           ('nb_params', 0)])),
             ('MaxPool2d-4',
              OrderedDict([('input_shape', [-1, 64, 112, 112]),
                           ('output_shape', [-1, 64, 56, 56]),
                           ('nb_params', 0)])),
             ('Conv2d-5',
              OrderedDict([('input_shape', [-1, 64, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 16384)])),
             ('BatchNorm2d-6',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 512)])),
             ('ReLU-7',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('nb_params', 0)])),
             ('Conv2d-8',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 9216)])),
             ('BatchNorm2d-9',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 512)])),
             ('ReLU-10',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('nb_params', 0)])),
             ('Conv2d-11',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 65536)])),
             ('BatchNorm2d-12',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 512)])),
             ('Conv2d-13',
              OrderedDict([('input_shape', [-1, 64, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 16384)])),
             ('BatchNorm2d-14',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 512)])),
             ('ReLU-15',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('nb_params', 0)])),
             ('Conv2d-16',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 65536)])),
             ('BatchNorm2d-17',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 512)])),
             ('ReLU-18',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('nb_params', 0)])),
             ('Conv2d-19',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 9216)])),
             ('BatchNorm2d-20',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 512)])),
             ('ReLU-21',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('nb_params', 0)])),
             ('Conv2d-22',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 65536)])),
             ('BatchNorm2d-23',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 512)])),
             ('ReLU-24',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('nb_params', 0)])),
             ('Conv2d-25',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 65536)])),
             ('BatchNorm2d-26',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 512)])),
             ('ReLU-27',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('nb_params', 0)])),
             ('Conv2d-28',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 9216)])),
             ('BatchNorm2d-29',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 512)])),
             ('ReLU-30',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('nb_params', 0)])),
             ('Conv2d-31',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 65536)])),
             ('BatchNorm2d-32',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 512)])),
             ('ReLU-33',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 256, 56, 56]),
                           ('nb_params', 0)])),
             ('Conv2d-34',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 512, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 131072)])),
             ('BatchNorm2d-35',
              OrderedDict([('input_shape', [-1, 512, 56, 56]),
                           ('output_shape', [-1, 512, 56, 56]),
                           ('trainable', False),
                           ('nb_params', 1024)])),
             ('ReLU-36',
              OrderedDict([('input_shape', [-1, 512, 56, 56]),
                           ('output_shape', [-1, 512, 56, 56]),
                           ('nb_params', 0)])),
             ('Conv2d-37',
              OrderedDict([('input_shape', [-1, 512, 56, 56]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 36864)])),
             ('BatchNorm2d-38',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 1024)])),
             ('ReLU-39',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('nb_params', 0)])),
             ('Conv2d-40',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 262144)])),
             ('BatchNorm2d-41',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 1024)])),
             ('Conv2d-42',
              OrderedDict([('input_shape', [-1, 256, 56, 56]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 131072)])),
             ('BatchNorm2d-43',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 1024)])),
             ('ReLU-44',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('nb_params', 0)])),
             ('Conv2d-45',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 262144)])),
             ('BatchNorm2d-46',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 1024)])),
             ('ReLU-47',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('nb_params', 0)])),
             ('Conv2d-48',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 36864)])),
             ('BatchNorm2d-49',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 1024)])),
             ('ReLU-50',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('nb_params', 0)])),
             ('Conv2d-51',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 262144)])),
             ('BatchNorm2d-52',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 1024)])),
             ('ReLU-53',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('nb_params', 0)])),
             ('Conv2d-54',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 262144)])),
             ('BatchNorm2d-55',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 1024)])),
             ('ReLU-56',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('nb_params', 0)])),
             ('Conv2d-57',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 36864)])),
             ('BatchNorm2d-58',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 1024)])),
             ('ReLU-59',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('nb_params', 0)])),
             ('Conv2d-60',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 262144)])),
             ('BatchNorm2d-61',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 1024)])),
             ('ReLU-62',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('nb_params', 0)])),
             ('Conv2d-63',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 262144)])),
             ('BatchNorm2d-64',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 1024)])),
             ('ReLU-65',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('nb_params', 0)])),
             ('Conv2d-66',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 36864)])),
             ('BatchNorm2d-67',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 1024)])),
             ('ReLU-68',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('nb_params', 0)])),
             ('Conv2d-69',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 262144)])),
             ('BatchNorm2d-70',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 1024)])),
             ('ReLU-71',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 512, 28, 28]),
                           ('nb_params', 0)])),
             ('Conv2d-72',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 1024, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 524288)])),
             ('BatchNorm2d-73',
              OrderedDict([('input_shape', [-1, 1024, 28, 28]),
                           ('output_shape', [-1, 1024, 28, 28]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-74',
              OrderedDict([('input_shape', [-1, 1024, 28, 28]),
                           ('output_shape', [-1, 1024, 28, 28]),
                           ('nb_params', 0)])),
             ('Conv2d-75',
              OrderedDict([('input_shape', [-1, 1024, 28, 28]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-76',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-77',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-78',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-79',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('Conv2d-80',
              OrderedDict([('input_shape', [-1, 512, 28, 28]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 524288)])),
             ('BatchNorm2d-81',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-82',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-83',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-84',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-85',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-86',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-87',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-88',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-89',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-90',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-91',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-92',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-93',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-94',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-95',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-96',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-97',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-98',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-99',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-100',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-101',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-102',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-103',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-104',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-105',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-106',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-107',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-108',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-109',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-110',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-111',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-112',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-113',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-114',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-115',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-116',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-117',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-118',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-119',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-120',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-121',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-122',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-123',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-124',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-125',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-126',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-127',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-128',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-129',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-130',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-131',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-132',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-133',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-134',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-135',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-136',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-137',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-138',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-139',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-140',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-141',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-142',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-143',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-144',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-145',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-146',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-147',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-148',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-149',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-150',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-151',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-152',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-153',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-154',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-155',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-156',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-157',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-158',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-159',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-160',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-161',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-162',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-163',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-164',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-165',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-166',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-167',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-168',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-169',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-170',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-171',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-172',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-173',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-174',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-175',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-176',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-177',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-178',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-179',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-180',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-181',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-182',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-183',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-184',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-185',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-186',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-187',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-188',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-189',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-190',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-191',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-192',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-193',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-194',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-195',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-196',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-197',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-198',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-199',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-200',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-201',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-202',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-203',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-204',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-205',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-206',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-207',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-208',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-209',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-210',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-211',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-212',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-213',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-214',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-215',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-216',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-217',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-218',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-219',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-220',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-221',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-222',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-223',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-224',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-225',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-226',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-227',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-228',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-229',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-230',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-231',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-232',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-233',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-234',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-235',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-236',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-237',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-238',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-239',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-240',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-241',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-242',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-243',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-244',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-245',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-246',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-247',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-248',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-249',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-250',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-251',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-252',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-253',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-254',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-255',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-256',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-257',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-258',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-259',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-260',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-261',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-262',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-263',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-264',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-265',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-266',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-267',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-268',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-269',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-270',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-271',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-272',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-273',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-274',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-275',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 147456)])),
             ('BatchNorm2d-276',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-277',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-278',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 1048576)])),
             ('BatchNorm2d-279',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2048)])),
             ('ReLU-280',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 1024, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-281',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 2048, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 2097152)])),
             ('BatchNorm2d-282',
              OrderedDict([('input_shape', [-1, 2048, 14, 14]),
                           ('output_shape', [-1, 2048, 14, 14]),
                           ('trainable', False),
                           ('nb_params', 4096)])),
             ('ReLU-283',
              OrderedDict([('input_shape', [-1, 2048, 14, 14]),
                           ('output_shape', [-1, 2048, 14, 14]),
                           ('nb_params', 0)])),
             ('Conv2d-284',
              OrderedDict([('input_shape', [-1, 2048, 14, 14]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 589824)])),
             ('BatchNorm2d-285',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4096)])),
             ('ReLU-286',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('nb_params', 0)])),
             ('Conv2d-287',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4194304)])),
             ('BatchNorm2d-288',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4096)])),
             ('Conv2d-289',
              OrderedDict([('input_shape', [-1, 1024, 14, 14]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 2097152)])),
             ('BatchNorm2d-290',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4096)])),
             ('ReLU-291',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('nb_params', 0)])),
             ('Conv2d-292',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4194304)])),
             ('BatchNorm2d-293',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4096)])),
             ('ReLU-294',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('nb_params', 0)])),
             ('Conv2d-295',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 589824)])),
             ('BatchNorm2d-296',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4096)])),
             ('ReLU-297',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('nb_params', 0)])),
             ('Conv2d-298',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4194304)])),
             ('BatchNorm2d-299',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4096)])),
             ('ReLU-300',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('nb_params', 0)])),
             ('Conv2d-301',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4194304)])),
             ('BatchNorm2d-302',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4096)])),
             ('ReLU-303',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('nb_params', 0)])),
             ('Conv2d-304',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 589824)])),
             ('BatchNorm2d-305',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4096)])),
             ('ReLU-306',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('nb_params', 0)])),
             ('Conv2d-307',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4194304)])),
             ('BatchNorm2d-308',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('trainable', False),
                           ('nb_params', 4096)])),
             ('ReLU-309',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 7, 7]),
                           ('nb_params', 0)])),
             ('AdaptiveMaxPool2d-310',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 1, 1]),
                           ('nb_params', 0)])),
             ('AdaptiveAvgPool2d-311',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 2048, 1, 1]),
                           ('nb_params', 0)])),
             ('AdaptiveConcatPool2d-312',
              OrderedDict([('input_shape', [-1, 2048, 7, 7]),
                           ('output_shape', [-1, 4096, 1, 1]),
                           ('nb_params', 0)])),
             ('Flatten-313',
              OrderedDict([('input_shape', [-1, 4096, 1, 1]),
                           ('output_shape', [-1, 4096]),
                           ('nb_params', 0)])),
             ('BatchNorm1d-314',
              OrderedDict([('input_shape', [-1, 4096]),
                           ('output_shape', [-1, 4096]),
                           ('trainable', True),
                           ('nb_params', 8192)])),
             ('Dropout-315',
              OrderedDict([('input_shape', [-1, 4096]),
                           ('output_shape', [-1, 4096]),
                           ('nb_params', 0)])),
             ('Linear-316',
              OrderedDict([('input_shape', [-1, 4096]),
                           ('output_shape', [-1, 512]),
                           ('trainable', True),
                           ('nb_params', 2097664)])),
             ('ReLU-317',
              OrderedDict([('input_shape', [-1, 512]),
                           ('output_shape', [-1, 512]),
                           ('nb_params', 0)])),
             ('BatchNorm1d-318',
              OrderedDict([('input_shape', [-1, 512]),
                           ('output_shape', [-1, 512]),
                           ('trainable', True),
                           ('nb_params', 1024)])),
             ('Dropout-319',
              OrderedDict([('input_shape', [-1, 512]),
                           ('output_shape', [-1, 512]),
                           ('nb_params', 0)])),
             ('Linear-320',
              OrderedDict([('input_shape', [-1, 512]),
                           ('output_shape', [-1, 120]),
                           ('trainable', True),
                           ('nb_params', 61560)])),
             ('LogSoftmax-321',
              OrderedDict([('input_shape', [-1, 120]),
                           ('output_shape', [-1, 120]),
                           ('nb_params', 0)]))])

In [48]:
learn.fit(1e-2, 3, cycle_len=1)


epoch      trn_loss   val_loss   accuracy                    
    0      0.32095    0.238403   0.925636  
    1      0.303741   0.23551    0.925147                    
    2      0.27871    0.229168   0.92319                     

Out[48]:
[array([0.22917]), 0.9231898274906928]

Validation loss is much lower than training loss. This is a sign of underfitting. Cycle_len=1 may be too short. Let's set cycle_mult=2 to find better parameter.


In [49]:
# When you are under fitting, it means cycle_len=1 is too short (learning rate is getting reset before it had the chance to zoom in properly).
learn.fit(1e-2, 3, cycle_len=1, cycle_mult=2) # 1+2+4 = 7 epochs


epoch      trn_loss   val_loss   accuracy                    
    0      0.286643   0.227219   0.927593  
    1      0.263413   0.225071   0.925636                    
    2      0.227629   0.225608   0.920254                    
    3      0.248123   0.229743   0.925147                    
    4      0.227511   0.226751   0.924658                    
    5      0.208453   0.22451    0.923679                    
    6      0.196518   0.224315   0.926125                    

Out[49]:
[array([0.22432]), 0.926125246426364]

Training loss and validation loss are getting closer and smaller. We are on right track.


In [51]:
log_preds, y = learn.TTA() # (5, 2044, 120), (2044,)
probs = np.mean(np.exp(log_preds),0)
accuracy_np(probs, y), metrics.log_loss(y, probs)


                                             
Out[51]:
(0.9324853228962818, 0.22725361272263017)

In [52]:
len(data.val_ds.y), data.val_ds.y[:5]


Out[52]:
(2044, array([19, 15,  7, 99, 73]))

In [53]:
learn.save('299_pre')

In [54]:
learn.load('299_pre')

In [55]:
learn.fit(1e-2, 1, cycle_len=2) # 1+1 = 2 epochs


epoch      trn_loss   val_loss   accuracy                    
    0      0.222732   0.223832   0.925147  
    1      0.207057   0.222398   0.925636                    

Out[55]:
[array([0.2224]), 0.9256360136016241]

In [56]:
learn.save('299_pre')

In [57]:
log_preds, y = learn.TTA()
probs = np.mean(np.exp(log_preds),0)
accuracy_np(probs, y), metrics.log_loss(y, probs)


                                             
Out[57]:
(0.9339530332681018, 0.2254323077408432)

This dataset is so similar to ImageNet dataset. Training convolution layers doesn't help much. We are not going to unfreeze.


In [58]:
data.classes


Out[58]:
['affenpinscher',
 'afghan_hound',
 'african_hunting_dog',
 'airedale',
 'american_staffordshire_terrier',
 'appenzeller',
 'australian_terrier',
 'basenji',
 'basset',
 'beagle',
 'bedlington_terrier',
 'bernese_mountain_dog',
 'black-and-tan_coonhound',
 'blenheim_spaniel',
 'bloodhound',
 'bluetick',
 'border_collie',
 'border_terrier',
 'borzoi',
 'boston_bull',
 'bouvier_des_flandres',
 'boxer',
 'brabancon_griffon',
 'briard',
 'brittany_spaniel',
 'bull_mastiff',
 'cairn',
 'cardigan',
 'chesapeake_bay_retriever',
 'chihuahua',
 'chow',
 'clumber',
 'cocker_spaniel',
 'collie',
 'curly-coated_retriever',
 'dandie_dinmont',
 'dhole',
 'dingo',
 'doberman',
 'english_foxhound',
 'english_setter',
 'english_springer',
 'entlebucher',
 'eskimo_dog',
 'flat-coated_retriever',
 'french_bulldog',
 'german_shepherd',
 'german_short-haired_pointer',
 'giant_schnauzer',
 'golden_retriever',
 'gordon_setter',
 'great_dane',
 'great_pyrenees',
 'greater_swiss_mountain_dog',
 'groenendael',
 'ibizan_hound',
 'irish_setter',
 'irish_terrier',
 'irish_water_spaniel',
 'irish_wolfhound',
 'italian_greyhound',
 'japanese_spaniel',
 'keeshond',
 'kelpie',
 'kerry_blue_terrier',
 'komondor',
 'kuvasz',
 'labrador_retriever',
 'lakeland_terrier',
 'leonberg',
 'lhasa',
 'malamute',
 'malinois',
 'maltese_dog',
 'mexican_hairless',
 'miniature_pinscher',
 'miniature_poodle',
 'miniature_schnauzer',
 'newfoundland',
 'norfolk_terrier',
 'norwegian_elkhound',
 'norwich_terrier',
 'old_english_sheepdog',
 'otterhound',
 'papillon',
 'pekinese',
 'pembroke',
 'pomeranian',
 'pug',
 'redbone',
 'rhodesian_ridgeback',
 'rottweiler',
 'saint_bernard',
 'saluki',
 'samoyed',
 'schipperke',
 'scotch_terrier',
 'scottish_deerhound',
 'sealyham_terrier',
 'shetland_sheepdog',
 'shih-tzu',
 'siberian_husky',
 'silky_terrier',
 'soft-coated_wheaten_terrier',
 'staffordshire_bullterrier',
 'standard_poodle',
 'standard_schnauzer',
 'sussex_spaniel',
 'tibetan_mastiff',
 'tibetan_terrier',
 'toy_poodle',
 'toy_terrier',
 'vizsla',
 'walker_hound',
 'weimaraner',
 'welsh_springer_spaniel',
 'west_highland_white_terrier',
 'whippet',
 'wire-haired_fox_terrier',
 'yorkshire_terrier']

In [59]:
data.test_ds.fnames


Out[59]:
['test/2c4fdb0f1d0545356e20bf11b166a98b.jpg',
 'test/026fd54ef87fdc261fb0fb49cddfddd1.jpg',
 'test/3e2e0f18aff3a28572255a2867751996.jpg',
 'test/b964a6ca60f81c19e84ad0aaa9ed6f88.jpg',
 'test/f5bdb338a1290c979bb8ff9071c3edd4.jpg',
 'test/95fde9f17b5983e555c8a50dba32638c.jpg',
 'test/a6efa3d0b7942c684dd35898f4928905.jpg',
 'test/9b55ca08b94e9210530ff6da1f606ebe.jpg',
 'test/09b770df98721d813129ba5c789b08a5.jpg',
 'test/5ab0a6516922e1cdb1091f054fbefff0.jpg',
 'test/667067662feed53f9ac4ac4d6d995892.jpg',
 'test/08c1a66912af795920a43e563acfe5aa.jpg',
 'test/f86bb8a2e851edcf769dd381e04f9e3f.jpg',
 'test/4a5d799f0db5155f3f7410616a3da460.jpg',
 'test/5fcc6279e65dc893713c18feec7849a5.jpg',
 'test/e6da14858db7781843db6af91551f627.jpg',
 'test/f49dbff2463687f867bfe1bc88f0a7c3.jpg',
 'test/59186d4f2fd7752ae2167a0c0bcc7940.jpg',
 'test/380eb30f1459f362034552147a7104f8.jpg',
 'test/1f9d4b33a8a9a2e5838f86fb358f66ea.jpg',
 'test/3018cc2084428697dce984854521bfa3.jpg',
 'test/02653e78d9f92bfcf002bd51395b65b7.jpg',
 'test/ca723dfb684285be9338d6c621a669df.jpg',
 'test/ed3f78bd3eb6751819212fa111857e51.jpg',
 'test/3e2c021f8d38b7e434b926e12424a016.jpg',
 'test/19b6fda352ab1b71ecab1d7ebd27031a.jpg',
 'test/ea0a6a12e3f6f65e4f742b258a0ffe30.jpg',
 'test/a6242640ed64c12ca1e145a027d7e777.jpg',
 'test/4825e789e50f79581ef88a82a08c8e23.jpg',
 'test/518513ea3706d89b1be446ce899a6088.jpg',
 'test/86475c1242c3f2ec067ff34c451097d5.jpg',
 'test/994406421dc025fa26b72855ca46a522.jpg',
 'test/84706e80023d20f30f1cf4f69741f9dc.jpg',
 'test/6d097864d7bf72b1f57a6f44e279a551.jpg',
 'test/1b7e7016d6fc41f854926bc5c047cdae.jpg',
 'test/1bf1f1d89afca589f998165354df8796.jpg',
 'test/1b2632ba08391a3fe16e5aa16c656214.jpg',
 'test/d651d1356b606866d1ad6875a40d125a.jpg',
 'test/cdc0eea2d672f69a082f4b86797b0a51.jpg',
 'test/1d32629bfbf1a44f630a4bad66e15da2.jpg',
 'test/c9d0973ef495ae244ccbada81d356bf2.jpg',
 'test/e3cfadb2543190f43da6bb5500c75578.jpg',
 'test/bbcc4372d4d3ff011af6266a88b85528.jpg',
 'test/5121f67240366810b61d24aaf5e41ff5.jpg',
 'test/79b6fcf07010c96281bd3b44448385ae.jpg',
 'test/d11f6cf0d90e6e37a476c4fcfa76aa70.jpg',
 'test/0b5784f22b6f62ce04c6e1abb72b72a2.jpg',
 'test/e24b2d063b3ad699d5eba7a01e4ae956.jpg',
 'test/a8dba4a58717a26f645ba6099a897014.jpg',
 'test/15843a88e6981a66185a2a6c85a6168d.jpg',
 'test/e66e1f3be08028cc17ea788657e014fa.jpg',
 'test/1b220f74609a8f2015ea898471c0674d.jpg',
 'test/39be0dca3049cb0b6ef8135ccab45b66.jpg',
 'test/35fa882c079469d27c35f4d29cfdc453.jpg',
 'test/1704866a26e172e1bdf79b2dd8be3dd8.jpg',
 'test/0ab1253d4d22b51d057be123e1585429.jpg',
 'test/512613bce1c17546316c8a75f50b1c6f.jpg',
 'test/b8fd4cf9f9eaeab2bb290284838fe476.jpg',
 'test/da50513167ade4e1816b0056141c5974.jpg',
 'test/f30f7155fd94e7f0d3621d9cc9031e93.jpg',
 'test/baa5c3206f5c616d4a07b07d9a5314dd.jpg',
 'test/f5b4f0c3ae9b723524e53043025bcd64.jpg',
 'test/0716352373a28d687d5df097512c5374.jpg',
 'test/9c57871c52d52861dd9d5bffde87dcc6.jpg',
 'test/21ba363165c9eb542b9f67a6e9f1da57.jpg',
 'test/8e839df1e76fbc901126915fc725699d.jpg',
 'test/a7f6cff4598bd95173e37581a71ff712.jpg',
 'test/da23c55978faa8bd88db953c1f264549.jpg',
 'test/41128b4a78205adc6daa72712a92ec65.jpg',
 'test/fd70f4e5c855862854cb650d72b9d697.jpg',
 'test/9e3e305872e25abc382648ebc93fdb1f.jpg',
 'test/1f5b9fc283b140a004b9ae234679ffeb.jpg',
 'test/fe3175f577485cbc3cb70a1fd5e0394f.jpg',
 'test/fd32579d66aa6223b19085aa600fbc2d.jpg',
 'test/ee457ce7dc7f426aa7704b9864960528.jpg',
 'test/f1c41fe76fb9962343d34c58efb384cd.jpg',
 'test/997078637af920e74676b807734795d7.jpg',
 'test/c0687588a561deac62bc753c24fb8b91.jpg',
 'test/096660fd535bca4359ab3f19882aaaf5.jpg',
 'test/b959999e5c1be2f79fe047cef94a5089.jpg',
 'test/cf1ce01da38d0bf27819def8b78f495e.jpg',
 'test/cff15c13208f1b99912a8a5aa7e4b96f.jpg',
 'test/bfabbffb6f9f517741b4317bd6d9ef99.jpg',
 'test/0ae94221b81d49e01b8fae3dd0f4f882.jpg',
 'test/d8868ea9ac7e8fc2c04fad3bcb9e5a6b.jpg',
 'test/ec8bf9fd1bae9c6cc54b996425538a5c.jpg',
 'test/cc26149b884a38865ce31a14334f062e.jpg',
 'test/770637e92a0522b90ec3277387125c41.jpg',
 'test/de172eece3080506aa3bcf1967f4a90b.jpg',
 'test/9f6611b8dc4ef5b77e18135f713f8a4d.jpg',
 'test/0fb39410b417652816759e4ae87f5f57.jpg',
 'test/175e30d0794ea318192d9a06538f24cf.jpg',
 'test/b47a57244b5f4479e0f5f7aeaba133de.jpg',
 'test/23f8bbfda11fdf717b1e15824c689352.jpg',
 'test/4fd5c8079f2c11d8729ec66f04aaa21e.jpg',
 'test/c3d6f1890f0a60e9f528fced6b206943.jpg',
 'test/46ba40ec3bcad76b337bd0df515eefd7.jpg',
 'test/054ac219ecd4e281c2cf1b2ee635bb99.jpg',
 'test/ed61910363f37890c8cc47b25836f82e.jpg',
 'test/5003ff3a66a776a4773c11f22eef57d1.jpg',
 'test/dbe2cc37ff845fd00c39175231d3f32a.jpg',
 'test/8645d8323d0dd7b72d9d40ab2b8eebbc.jpg',
 'test/4f811e961c91d8de34730903bedf2114.jpg',
 'test/2a4eead6f7d016465387f5215ef35ec6.jpg',
 'test/391ec9ea882a52642e078ca64df2563d.jpg',
 'test/443245a5bba869e596fb05d2d0eb63e1.jpg',
 'test/78676d2048c9b2cad3ecedb61c344136.jpg',
 'test/8b1f5142b35559f43175e99a346dc9f0.jpg',
 'test/53048de56428cf92ea9608c74ed02061.jpg',
 'test/5a14e26f320f9ec164ab1e8c68afbe7f.jpg',
 'test/bac6d30b9ea2fd97c07be6d5f82dd5ca.jpg',
 'test/73177544ac08fb0c467c30e664adfa0c.jpg',
 'test/4d63401331c349e43aa4c50845b6d4ad.jpg',
 'test/062e065c77d4b759619612133e318dbe.jpg',
 'test/82128964816624ecdd684dd695850a3c.jpg',
 'test/1c76500d219146c685ef03b6c5cc0065.jpg',
 'test/c72dd7ad6b629d37103ba159aebf9dee.jpg',
 'test/03bb0c67dce7792133b3ca579992d370.jpg',
 'test/f603da0e3cfff2ea4d792c96fe5ebac6.jpg',
 'test/97ff87a80a1d4f1dfce697dd1938caf0.jpg',
 'test/fcf9a2a6cf1cefed8cea82187d58b503.jpg',
 'test/9748a8e5837f62e681c89139878cda88.jpg',
 'test/20d15fbc56f635f26bbba607309e838c.jpg',
 'test/7868bda8b52226ccc50c5eb4f1d00d08.jpg',
 'test/d62267a7ac7f98a7607900ea52515ca1.jpg',
 'test/6b773e280fedf020218c5bb2ed54900a.jpg',
 'test/5c05f1895a7caeebc627e0a85d7df32a.jpg',
 'test/4a99333bc325352c853b378f1d9f69e4.jpg',
 'test/b9b8fd49d67294dcd0b4d0cb50302d18.jpg',
 'test/df903a0522873bebca93d1d93bc60bc4.jpg',
 'test/feacb0de64a7fddfca983eb6ca11309c.jpg',
 'test/071524aa73c1fa1fdd60aa54ebfd5719.jpg',
 'test/ad64322d51f9b36dc53b40e77ade605c.jpg',
 'test/5b2f9542a2ec6bac879dc197ebc56be1.jpg',
 'test/9b14e6801b537a5fe978e7493bf9d33d.jpg',
 'test/32b7862595747b27c8683b627858d2b1.jpg',
 'test/cf7fd8632c8c94573f293b65f4117d4d.jpg',
 'test/a627206b868684ce51e3696682a1f347.jpg',
 'test/5e5f77203e5be99fef50148335f95e69.jpg',
 'test/77786f2601ba6ab4ddb5a36fa52b414b.jpg',
 'test/383ce456e0b8cd72d690f0fe9280616d.jpg',
 'test/a4265d6446c72c768fb84e6be559d64b.jpg',
 'test/b5f89ca8292231d34792800bc2680ee9.jpg',
 'test/045e64275a84a8fef942704c046ad98b.jpg',
 'test/a52987023c657190aa20a31dbc399df2.jpg',
 'test/06b3a4da7b96404349e51551bf611551.jpg',
 'test/4769921130d036eee68111b042dfb5cb.jpg',
 'test/7155718b5d167587c440f5f0ecccb872.jpg',
 'test/acb521ade5e146aee2257336d49c57b8.jpg',
 'test/70ac4cb7a43215b6d341d73443540e92.jpg',
 'test/46169bfeef4145dfd7f51b0c977fdfc5.jpg',
 'test/2943b0064e6031f0a215ecf55ef9848c.jpg',
 'test/010a0d3eb52479f4af474662ee0f67ee.jpg',
 'test/7f22da4685968b47a179a72862222bbe.jpg',
 'test/ae7cb42d3075e6e5415fa319126670f5.jpg',
 'test/f3d5aa14bae0561b6b9146d7e7fa0917.jpg',
 'test/9d6538871f445d81c7cab1d4d7517e66.jpg',
 'test/9b2f71ec73e1a3522b4d3f2f98fc1496.jpg',
 'test/cace8abb5880d8042cc79832eedbbc8b.jpg',
 'test/ac750b59d18006087fce2e741eb82bc0.jpg',
 'test/7554a46b469aadeea862ad1ad7984685.jpg',
 'test/1ae9016e1b4815586ce17e54eeae96b3.jpg',
 'test/ca0e74e73b66d1aacb8122d96ecda636.jpg',
 'test/1cd30957e8374f012cf6cdb07077ba47.jpg',
 'test/01d5ffa4de01074483149bec0f6e5a59.jpg',
 'test/2d3818c59288cd71e8a20e232048571d.jpg',
 'test/6fa52b20c124da0aab210e8540a50016.jpg',
 'test/1b567e4dc46208a9d1fd051eb2416622.jpg',
 'test/81104756188386b0d060406f42b1539d.jpg',
 'test/e42105cc55af6788d3c15473c562dc77.jpg',
 'test/6fb4a20253ff3a2fdc0c1e78878b092c.jpg',
 'test/281dfcadcdbcee85949accc0eadd4732.jpg',
 'test/25b0df1059b8c1839e1a1b2726f6dd7b.jpg',
 'test/616e1c2a6eaafca4c0bb8027a995e0b6.jpg',
 'test/c11958ccf93630b4300e3530fbfc0fe9.jpg',
 'test/aac5caab05224706d9c24f294a71f247.jpg',
 'test/aeadcc13a259bfce54e89352b432beb0.jpg',
 'test/7c76deac2df4449df3c1b74bfce3b18b.jpg',
 'test/c627d3fbbcd73ee2a1fa1d2058b0643e.jpg',
 'test/2de3603e679bd3174a0a2464611bf21e.jpg',
 'test/a5d1f79162eb391ad82192d4d6899181.jpg',
 'test/ef3cceaaed2906916a76290fe0bd2b32.jpg',
 'test/ed3b2e79859710376b7a91379234b1ec.jpg',
 'test/cfdb4cf6ca3237e3d1b7e365a7f51f32.jpg',
 'test/c1fea5a03207a7feec715468263af528.jpg',
 'test/9a32d1d6c3d9a2cee0794f1e27737157.jpg',
 'test/5fe3639eac759e48304baee9e2264356.jpg',
 'test/b059ab281276da6af309f083e0cfc3e2.jpg',
 'test/34b449e2710326559973c285ae40efac.jpg',
 'test/1b6c3e7be366ce22f5161dbce9603ff0.jpg',
 'test/e826c0ae5dd27876781c10e1be444fd5.jpg',
 'test/b2880d380cbe73d031937f7c4605992d.jpg',
 'test/8b6ff551ccb530d325f9de6dccd9e546.jpg',
 'test/d0f2d3f479653cbd40f83891ad70236b.jpg',
 'test/d8eddafe213f5fa44493fb6215d00070.jpg',
 'test/372cc49af09cdecdb0290034a83b20b6.jpg',
 'test/bccaf89b692d209d18ad7e1201fb342f.jpg',
 'test/9cbfc099d179303e2eed12788c228a88.jpg',
 'test/258f32b2e965e29825a2afe8ffccf25d.jpg',
 'test/0d8ce6159135b56cbc62081ec3b674ac.jpg',
 'test/a8b25cbffb50c79dc53467205b7f2226.jpg',
 'test/784116be4dd40467aefba9af5e503597.jpg',
 'test/ee4c8303084840f4fa8ef6cc434dca91.jpg',
 'test/7f37601479a5ab640905d98e503ca041.jpg',
 'test/020d14c04769cdc0aba82befd41816da.jpg',
 'test/7cdfeaf825c1aab0aefcbef6d1a49cfc.jpg',
 'test/51595f361cbcfc4b86856c0c86670bf8.jpg',
 'test/d0b3b5d87182224aa1b3a44d364fb3a7.jpg',
 'test/5224e9da3c1d74f4b192a629bb8ead4b.jpg',
 'test/bc3b0ce23dc2e72e39ca0ac0150541ba.jpg',
 'test/32efbf6a6324c5075bbdeef222ea2d15.jpg',
 'test/4b54b74c6aa6569a0ec44c2b90e87443.jpg',
 'test/8bdc1bb017b6d13f87819804504953b3.jpg',
 'test/8a08c0b0d4554a270f66f2f16278ee70.jpg',
 'test/6e4d3a34878fc9b78993c43be028b12b.jpg',
 'test/c93ebdfbbc32cfa8bd9baa5015d0c00b.jpg',
 'test/cabc63d17379441790a41da2b775fae4.jpg',
 'test/795bd673cfe2178819c10a042fa77b5b.jpg',
 'test/f1b634511c0ca2fcdf53c9c30f3358c9.jpg',
 'test/96bd8e76f9cf72cedd6bca1f5fdba68d.jpg',
 'test/930103a82c3521849c9e73e79c3aa42c.jpg',
 'test/4749fe3c946b813ce12c299eeed888a7.jpg',
 'test/b9d193f068da6ab75a3d1e290bb4d319.jpg',
 'test/3a39361b52fd39a5c5e949dcbb0aa679.jpg',
 'test/a801683f090325c42a436f000e6dc29c.jpg',
 'test/e40a39dd88f04b29ab3cb3a986503f8f.jpg',
 'test/c8e634778f97c45ff1830c5a143a43a6.jpg',
 'test/38f85dd6e68e320568ed88588b83ea30.jpg',
 'test/b7cb1a73a6512faf62c025ef9c4e6204.jpg',
 'test/ffbcf032231bb0b025f9070d42ab7e8f.jpg',
 'test/1f0d63748605a5e63a9fafaa907392b2.jpg',
 'test/b5a43a4a1bd5b3fae022c5c6969d32b2.jpg',
 'test/f367afa19bb30234fafa16c64b3730f0.jpg',
 'test/b70c678998de92f2236a6ec3dc761e0d.jpg',
 'test/f88ac7d8d4dcc50858be35d6bfcf5de3.jpg',
 'test/cfc0a54d5dfa31615c0262dacb4fb4e2.jpg',
 'test/2346591c30ae84de99908c608be5b95b.jpg',
 'test/c6e03c2523827a9a6e7101b967925fd2.jpg',
 'test/82fbff1bd375474e3d4ec5cbfde3f9f0.jpg',
 'test/0d0964db201a2c0765bde74ca28148ef.jpg',
 'test/48941c2564d031a26a89ae47d039e696.jpg',
 'test/14831db5108c3b9c056efe04329a3916.jpg',
 'test/997fe96ae4e3f5c7ab2b30c7b4551d79.jpg',
 'test/b8a3047509bdd743df820c7a6cd7dd87.jpg',
 'test/6922b815d5dc1d70a106e305f433ff10.jpg',
 'test/a3a2bd6bd98a4e64d2d3b5e6c4c0700e.jpg',
 'test/40e29c101b5bc33e9e252bf850a9aa76.jpg',
 'test/e8889cf9d7b2701a85be1c97661b9b26.jpg',
 'test/d2da98041804728e98d85b9ee42571a3.jpg',
 'test/0b549d7b0a972428bfca5bec213ce494.jpg',
 'test/fb1b592289ef0685bf0c48fde88bb1bd.jpg',
 'test/95bd03289e641ad4797a63a6cbc86cfc.jpg',
 'test/fe0940c6a3ab0fb53c961295f656bde7.jpg',
 'test/2c485d139a3c374c2af80dbccd337f11.jpg',
 'test/390de735a2798852dddb71d30202e54e.jpg',
 'test/2cf6c91192f2c2950635a4b8217fc34a.jpg',
 'test/c5120a58c8b044f3968bb8bf8c281ac0.jpg',
 'test/c6371656002d56de372719eedbf02806.jpg',
 'test/ccc75852ccfe236eb8bf16c55f55d5fd.jpg',
 'test/f1478f740513a7406d715c9d7ead6053.jpg',
 'test/2bf0760aa393b3284d5194d4d25ce152.jpg',
 'test/620e3952a1bc72efd720a286e4e3b3b5.jpg',
 'test/43a411e0747a0b39cbbed7802c5b6013.jpg',
 'test/bd4211cd31953f8ada0a80791a37cf73.jpg',
 'test/e383a31009f0779536d43816c10bf662.jpg',
 'test/8bde8fb33daba35bbf4e6560e5bc45a6.jpg',
 'test/ee7bdce4ac4008b3551ca66f82712e31.jpg',
 'test/d530d1f96aeb086140b9008a319ea45b.jpg',
 'test/9a64ea7bf2211f9021da989ada36063f.jpg',
 'test/f945b071d6bf639baddf368645b305e4.jpg',
 'test/c33c30b259b1422900edcbf290ffcbc0.jpg',
 'test/5b2695cf4db8628a7408602c31763ba0.jpg',
 'test/fd313930a7c3eddcc73e01fa6789c841.jpg',
 'test/372969e9b4061489f312a607c9e8c149.jpg',
 'test/85819cf427f6e9806a16b087a1622c5a.jpg',
 'test/16ead4e130b3e89220eb965932a8682c.jpg',
 'test/528b62efd4762cc7d91883d61b7059e9.jpg',
 'test/30acb7d3ea82b6dd0e099fbf42065212.jpg',
 'test/21f8a3e634b14adb3cdce5e9d552fdb7.jpg',
 'test/8655ac55ebc4d0d0a9d2f1f140aba54d.jpg',
 'test/478c68493385dfad26b6164b74b81ab7.jpg',
 'test/3db2a3dbf0e6d9829ffe8212629c8693.jpg',
 'test/b65264ae0d0dbe3b6b060640f69aef89.jpg',
 'test/4d62b92c2cae97d3f5ed5fc6a6ab09c2.jpg',
 'test/e26901a9e04f0ba89765fb9b9b7f675f.jpg',
 'test/3c52947ad6db1601beb339ef2da139c1.jpg',
 'test/d4c6d9c40b58fc16c0b42532a21406b3.jpg',
 'test/1ba1c3c3ad310873eb0e4182d05eb80c.jpg',
 'test/7f8e24fb06af08064f72309e254a921c.jpg',
 'test/f7b0596d6f3a5fe9006f04de9cf4ab0f.jpg',
 'test/90a3e77e8802823f857c32d281f3397b.jpg',
 'test/28be661edf678a730dde4b41918f3dca.jpg',
 'test/89f0b1b962cc074149972526aaabfa7c.jpg',
 'test/87014c664be9fa67cab57a1d7aaa8c3f.jpg',
 'test/086a6fe01b1805017e8cef3c9ccb52ab.jpg',
 'test/992e80ea2cd1549a5f71b04e4430e529.jpg',
 'test/c286f45167e6f06cb411b7474481ea7f.jpg',
 'test/c89cace19e82b4c99b193a198bf75bdd.jpg',
 'test/11080bc5dd7d5a15b68fded6d2e19e67.jpg',
 'test/319d13f45b021200c589fd9b1732624f.jpg',
 'test/f7344ee72050c512b7e4b859f4a7836d.jpg',
 'test/0d2421d1aaeb809587a95def06c4ae4d.jpg',
 'test/52acfa995434f4623164fa27dcdb98c8.jpg',
 'test/dbe3b814b5d5f408bfbe095670df2195.jpg',
 'test/d0ca12c4617619eb08ed0793b50d1ed9.jpg',
 'test/7586e72c940293cdda507e5e40c8af65.jpg',
 'test/8f0afee5014fa576e144445d2d0b3ea8.jpg',
 'test/49a13d472605473ef3f9b2e4f638d700.jpg',
 'test/7ebdd13f29a86637dffab6a2bf6945a4.jpg',
 'test/a7170c2e693724ee7e11237db838fe22.jpg',
 'test/cca01c215b414721d776706d1f6d8a93.jpg',
 'test/a7e40916399acf9841fb90329141c3fc.jpg',
 'test/900bbe04d569954b95e8cb9a7a45cda1.jpg',
 'test/84072d2142d43e27decbad9736141bb0.jpg',
 'test/7399317af0a43b79c1f7de21b5fe97d1.jpg',
 'test/d7ab932aabe46547f05d3fb7c7856a3c.jpg',
 'test/9b17ffdaae82c77ff642004a4408087b.jpg',
 'test/263e32bbdcc109a06b6282733cbc8e86.jpg',
 'test/69e231ddd06ed66f4517f695908c7e6e.jpg',
 'test/de9fc145601771b7a5b7e68822416fb5.jpg',
 'test/d53dc0a9b4d990766da8e05535747a9a.jpg',
 'test/60fb5dea0ad6ab8ea53ffc6f4025176b.jpg',
 'test/11754ee6d33fceb7a8dab2c33f3ba008.jpg',
 'test/255e0e8148a38f178190a90c16c31fe7.jpg',
 'test/6dda2fce96e068aefe7df7758dec3c16.jpg',
 'test/73c140ce9ba6bc5527f2ecf1ef17e974.jpg',
 'test/b8a095f820b34a9f102b4cbb0c747528.jpg',
 'test/af237c14d331689884a59904f1251983.jpg',
 'test/ead86e148dabfcc4ef7f4dcdce9fcf57.jpg',
 'test/634d1ff903eb3dfeecd96e9a5b54fcaa.jpg',
 'test/6c597194b92c2b412876214d789db2df.jpg',
 'test/78e1dc4bfef9eae0bf251302e38d511e.jpg',
 'test/00485d47de966a9437ad3b33ac193b6f.jpg',
 'test/e5c9089a34d5352c765e8c453e106122.jpg',
 'test/50a01944684a93c06c650bffdf0ad8ca.jpg',
 'test/73da54912a7097f28624ead4244e49fa.jpg',
 'test/df2ce797bf398414aac7e20119c17cb6.jpg',
 'test/f5319adc463ccf7e82f10a34ce39c190.jpg',
 'test/af4e22d6628e3e7707c5a3bf350e34ed.jpg',
 'test/9bfac33202b439e6a86a284f8ff4b5a8.jpg',
 'test/bc70dd7c34c15adba0556d7cd4969027.jpg',
 'test/4d2aedd8af39615a3a949e900818d896.jpg',
 'test/9705dc3d036842159812822f07f2699e.jpg',
 'test/ae17d1bb016bb43cceece0318c5f2da7.jpg',
 'test/cbec48a7350a78e419b5fc1e4068b98f.jpg',
 'test/fcc295e22d155711de90537e5cde7cee.jpg',
 'test/28443fec87fe42d33ff84bbe7d112a09.jpg',
 'test/501067f35055cba7fec79feb53bafb88.jpg',
 'test/455dcc3deb86abdcdf92aa645d19bfd8.jpg',
 'test/b58fd31fe8ae65d4e3cd96608a3ab430.jpg',
 'test/158601ca828c9c90ed9640d2a6ad2811.jpg',
 'test/e715a411098c046cac90c3facfa58c77.jpg',
 'test/33b508449d1b0c6580120c95d54aab00.jpg',
 'test/996254e59f86a920027b43542c177b7d.jpg',
 'test/020999e4f2b9509d90a59de565a0c723.jpg',
 'test/deb063345bf2b6752e2fe25cad096547.jpg',
 'test/469085cbd5bfbe6eb61bac06f7122e2a.jpg',
 'test/3692e90a28ff97f0bba9fc7dc599ec20.jpg',
 'test/f4a3d9cf1909fb5d894ff5d5121af9b0.jpg',
 'test/09db0bb220cdbbc0adca63e38e64ab38.jpg',
 'test/c8c5efff1a3c534b6eb8a3fc05c69033.jpg',
 'test/a1689948e4fac6e13717092a634ec254.jpg',
 'test/cf396de52276b1669ffec37239069ed0.jpg',
 'test/cd2329a9004fa2f39201a2107263afcc.jpg',
 'test/ecba66c5313a2a5fd4017a039a9501b6.jpg',
 'test/63108d83f863cac61abcbc696f31aab7.jpg',
 'test/0a28fe94aa27ebd0fa587c8a474117a1.jpg',
 'test/98c7dc8783d5441bb1367a585a05a8f6.jpg',
 'test/05a3c8bda27ea3fc224704ad70779913.jpg',
 'test/e2628b6bde028b5eb593616128728907.jpg',
 'test/8c9e1c7b34cb5a5de00dc8f18302db76.jpg',
 'test/bdcb95ac0109c3ece2dab46e352eee22.jpg',
 'test/15cc70e270c48a1e19125a172e90a147.jpg',
 'test/bb56fa7fbc16268c187d855a44ab9338.jpg',
 'test/c0187477b5cea0f961f84ed2cc4c0c45.jpg',
 'test/868326b7e666882ef083c1d21039bb1d.jpg',
 'test/33bcb26084c2521cfd67ae20bef3127b.jpg',
 'test/ae3a2e79b17a2f0ba57206cb00d725c4.jpg',
 'test/0bb63e30692f00bc7bf0ab5ac787b162.jpg',
 'test/c142aaf180c17ce11d7f2291d4631fa3.jpg',
 'test/a6c3d9d6ee6df8bfb87d7f141448d799.jpg',
 'test/603e084e0a198c465e8d69f0aed8459f.jpg',
 'test/10f5107a94eaa2355bc66f095e1ee9fc.jpg',
 'test/a99c981912b220c37b3dae0a2a4c9760.jpg',
 'test/34cc85bcee5d753514001575e6157c6e.jpg',
 'test/45f297f2dccff46b38986cf04a47444a.jpg',
 'test/c81cfe1f3434bb984f43cfb74600ecff.jpg',
 'test/606aef954ca30806168d0d08e52a4dbf.jpg',
 'test/4ecadc974de67ce3358e17950589007a.jpg',
 'test/56c26bf0ab12b5c10b761037671c2520.jpg',
 'test/b77dbd50464ea6f854fc74754407b9be.jpg',
 'test/0467770f34410f3fafd2482342d69f77.jpg',
 'test/7c742720b1272e0e76ca1a5a0eb768a8.jpg',
 'test/76a99fab327ab643f1109fed6197f6b1.jpg',
 'test/515bdd553272c858e7cd2704e6e91e14.jpg',
 'test/cc1711087040cc1f3d135e861543a64b.jpg',
 'test/f29de7ef9ac75de46170fd50f5b2d173.jpg',
 'test/5e01f7c8b9f1338a340c764906206367.jpg',
 'test/5111a8702997a4d31016ffe815ce1518.jpg',
 'test/22e505cea377535bb668f3f8fa745464.jpg',
 'test/5d9c0c30c1908e9ef0390120a9eb41c8.jpg',
 'test/6423e27d0255a4e237adb4993c229d26.jpg',
 'test/cbe85927af335b6e1ff2830ed2a864ce.jpg',
 'test/9593687e9915615d54cc1310da3a8f62.jpg',
 'test/57ba777547a97bb3251d69d3a358137b.jpg',
 'test/c2041b87090d86e3f4682040cd824b33.jpg',
 'test/73c66923717aee265ad6e9cc2266e602.jpg',
 'test/41023ca0ec69b43c486b804c0ad9bafa.jpg',
 'test/a71f9dcc0cad1fac04ce95c3d4303b02.jpg',
 'test/aa7cdc576f346efa2b3bf7e130c69f1c.jpg',
 'test/85c13ab8a324ac101734de1251d4a551.jpg',
 'test/b484aabdb7f4b0495e1dc4df26fba764.jpg',
 'test/0c65c361ccaf8d7e79036a67d6290802.jpg',
 'test/ffe9717b7937c262f849416976f7620a.jpg',
 'test/30ec502a29f683419e3ace3d8b30a0bc.jpg',
 'test/77b8f03c467503121a1f0be727b90538.jpg',
 'test/2cbb111f9df4ab277e88f68d214a3ac6.jpg',
 'test/6f9ad72c2bdd06a13bf40729bf816831.jpg',
 'test/4ec4f48a2d9a7997c1012773bb15fe8c.jpg',
 'test/f9e23db817511ad879ddee9edccebfe7.jpg',
 'test/5559c2ee415c39ac3ab94bfc6f73789f.jpg',
 'test/ea8fab5f4003724ac49ea787216998b1.jpg',
 'test/01df86b786d0a5b4cde3713a1314ceaf.jpg',
 'test/7520c13b27768c999174118005523be9.jpg',
 'test/e39be68f3200f0ecde589e571ae6df06.jpg',
 'test/c02b45ea26ff3c7b7f7bd893a2fcfc6c.jpg',
 'test/6d6519ebd4a475643e4c64043005cbb2.jpg',
 'test/ec2a07ae6eaa64dac4154584ef229937.jpg',
 'test/46d64fa64be77a9b6e5363ea3bdd72b8.jpg',
 'test/c0f00b1690172c6b11f2d2502b84ee14.jpg',
 'test/c1aa9ed261bd003502bee2dd5e267d13.jpg',
 'test/e49bfa1dc9bc6fa7464b29507725b3af.jpg',
 'test/31ee20c24af937270456165babe0f7c7.jpg',
 'test/76ac0074b7bec31ef8376a24b671a4e3.jpg',
 'test/2a1c95b9f131236b715df75ff815fd0b.jpg',
 'test/0d1e036ce1a811deaf6aceb405e34d50.jpg',
 'test/f742b1108deb763728aa78f8e96ba68a.jpg',
 'test/e0bf90705facb623a6f36046cc495659.jpg',
 'test/21814b654950d7d367c4f5560f62baf1.jpg',
 'test/8d49449b520df8e2c9af5babc3b8f07e.jpg',
 'test/a09210b024674693bd8349c3e29dfcb4.jpg',
 'test/03461e6eb363992db018686fc1986452.jpg',
 'test/22f9ef172a6e025788569cd69a688b26.jpg',
 'test/7603a1e5ec7825b354d3d9f2dc0f6059.jpg',
 'test/8db1ec047cec0b11155046a929e3adff.jpg',
 'test/0ad84b0d9083b4e0dd5840ab77c4623b.jpg',
 'test/2b5c368c24220be63bd6b6e7aad314be.jpg',
 'test/d6f824ffb9802dd33cf45e0dc65ff652.jpg',
 'test/8d243d285e72a16d8c266866f5e6738e.jpg',
 'test/931034049ced098102c7d5d2419fe15e.jpg',
 'test/768684d291f70a182f00ba1b326031fc.jpg',
 'test/158e88cf3cb41d3a88308d163eaa2176.jpg',
 'test/032b031f2c08f87b76608b2c19851725.jpg',
 'test/10c4c824396380cbc41c36f28b1b9baf.jpg',
 'test/20559a6fec79c8fb2fbad179ce4e82ad.jpg',
 'test/045e084e6ca9f5af87fb0f033670621c.jpg',
 'test/6285f032bd185a01e8d07f60bc96d4c7.jpg',
 'test/bfc8e5fe6c364c4aaec8d053047f0449.jpg',
 'test/99a7b1c05146b4ba6af490cd981ed687.jpg',
 'test/2c2954c35e390e69172aa8f2f94def46.jpg',
 'test/52c87fff655788b8792638ebc09e8ffd.jpg',
 'test/ecca3983aa3cf5699ce3aa29c7899df8.jpg',
 'test/0afdd7296357eed0c69a63fb228645d1.jpg',
 'test/be248438d8c470ccd5091b87d1fad336.jpg',
 'test/138a5ce524f0ef30818208492eb169e3.jpg',
 'test/1df01c807a113eb783542f8eed082ef9.jpg',
 'test/1403ae02b539f0f2aef5b98809b2fb6b.jpg',
 'test/1dac364849934707c3dc109b86a92e5c.jpg',
 'test/f33e07d0a4dac780e19f00818752db55.jpg',
 'test/9bc1344b15a68dd1c05c6b504d7df260.jpg',
 'test/8039f8c115eeaaaa324820bb49640fcd.jpg',
 'test/9fbe5a77b08362b4eb5b75b94597f144.jpg',
 'test/965163cac5f977a80207e8ae4527c505.jpg',
 'test/9a8b79966b15e951e45ab09ac096075c.jpg',
 'test/56d6c58aa719ec8d4f8f513800578f8c.jpg',
 'test/2aa0320f1b6757f67b36b53ae1ead740.jpg',
 'test/e380bd4f8375d09ae72f4f36aa610031.jpg',
 'test/2d2ba420bab3b46d86f9f33f4fe1c23c.jpg',
 'test/404443d10afb7e093f06f340d435cd7e.jpg',
 'test/8870333f2663e8001f88f8a8006f47d8.jpg',
 'test/25600c773eee1db25c6f29e9601597ee.jpg',
 'test/28e205cf6a6ff6f12b261eef8305766f.jpg',
 'test/bc02541611a69f7602d4b959c07bbb6d.jpg',
 'test/982ec2c96fafed091914bbbda741b568.jpg',
 'test/4032444c41432de0d3383d7b1ee9b956.jpg',
 'test/9582b56f802c62cfa1a8f9bfccc07b4e.jpg',
 'test/72ec9ff0338193778ef1760ed3a33789.jpg',
 'test/760c63df844fa16bd2cecb53abf4048e.jpg',
 'test/9732e1cc24ea1a01dc6f504050b24392.jpg',
 'test/c228e7120995a81ecfefdfd3979605ae.jpg',
 'test/59f357e88e3d918a3cf064ef5ba79106.jpg',
 'test/d187d843c451ffc0d9cb1b830553eaf6.jpg',
 'test/c917b56307748854b0c72617c506b600.jpg',
 'test/e647098485898391b700270c61824282.jpg',
 'test/e0e3eb01e80b1d694a47b23909e158ec.jpg',
 'test/36b670316f3f1b7bf422a2d654e8c2a8.jpg',
 'test/6185d48ab57403045d30a7c59f534d54.jpg',
 'test/e699b20911a55abda3558c5bcd37443d.jpg',
 'test/9f4bbcd8a5b189514d3098516983621a.jpg',
 'test/04ec9d02010d787f46ded19a75429b8b.jpg',
 'test/97b52c9b094e6e8a978565d8eb78db75.jpg',
 'test/bbda835412fc5ea582f68ac6f9bea2ba.jpg',
 'test/82e41a906dbd9ec362a3d49cf6bbe645.jpg',
 'test/109433cf9ef7501a038d31f2f4b3f619.jpg',
 'test/4627fcbeb62a98c90759cdc089b27043.jpg',
 'test/5c5b537431f6c7b09455409aa5e5810d.jpg',
 'test/a079f72193264bc5685e5d28d7372680.jpg',
 'test/c32b7011abbab8b878c9c507ec3d3ff3.jpg',
 'test/7279107f8559a28be6b10f5538f0b8fd.jpg',
 'test/7a8b4ab738d1a6e34281aa96f24265f7.jpg',
 'test/09612c47e84bcdf06c8e5a99ac1a8bd2.jpg',
 'test/077688a43b63922f7879b2fd66d32509.jpg',
 'test/41c2401105d650037154fa9dff960018.jpg',
 'test/a4086a730b6c5011be6eee3bb3b92463.jpg',
 'test/186ce2324e1dc6ae0f0fe51811a9c2a3.jpg',
 'test/168fcad3c9a90af9b0d3426ce7577c0c.jpg',
 'test/f674b20155dca91ac87e2bcef27b757c.jpg',
 'test/223d756d28558360245944689cc2a988.jpg',
 'test/bcd3f3f8402b5b476ca6d6c5fe1661bd.jpg',
 'test/d14efa213e4667c1622c0cc0c42e2642.jpg',
 'test/33fe5015779dc14108b5abe0b5a5ab45.jpg',
 'test/efb73fb00c85027773f3bef3dfc6c06b.jpg',
 'test/caa60ef3fb3d1ecdee62fe54d97af267.jpg',
 'test/1f9ac11b6158c651d898c15c88d72361.jpg',
 'test/9bd26745a9d742a9b164b80d714f50df.jpg',
 'test/9e7d3005a8c907faf17e552e24f3bea4.jpg',
 'test/0476e431ee08d486f1175f1a401dfafc.jpg',
 'test/38da91ceab72f3fb2a346414a309d32f.jpg',
 'test/533f4094b80a234c74cbd2ea942060cf.jpg',
 'test/6d08cad46028311c98717d3865c466b6.jpg',
 'test/6b53ce7ea9d4ba5ca621c94fabd39c69.jpg',
 'test/d6cdef68f0e61adc169680414af292f0.jpg',
 'test/f6dab4e4fcd85420282b12d36f340fcf.jpg',
 'test/46069a1ceb5a169aaf8d4036ab9b0a7e.jpg',
 'test/10863e6d9d1cb526cc9d90f30a585719.jpg',
 'test/f47e4614a5d7d190cf95b4b9c1e78576.jpg',
 'test/14c213ac8dee633a006a846c30fc5801.jpg',
 'test/2e14a1d3314bdd98aa9c4d43cf3e46bc.jpg',
 'test/91fdbcc6640c5c90b1ad7a970edeff7b.jpg',
 'test/681d6ebf2dd9d90a841b8cbc2604b0a8.jpg',
 'test/f68c74c33e5a231bd45bff6206401f09.jpg',
 'test/00bbfaa5b2bff32a3dc8ce1563e484a3.jpg',
 'test/34ebd9b2683ffca0990395be0dcd5050.jpg',
 'test/028bd6c628883784fd39841e9e26a02c.jpg',
 'test/0829a60da0c03d84426d455ee8a8de24.jpg',
 'test/a65743c69cb4623805308946fe8b38e6.jpg',
 'test/1fdcbe1bcd80c118461512790a250e67.jpg',
 'test/0cb0cc50ad302ff64f3297ce361ec485.jpg',
 'test/f4bfd6652f7cb8d9e99c7771ba29ab8a.jpg',
 'test/291c193c35def70cb8b9e4371b1f9b3c.jpg',
 'test/5b1a1246d5596c873a86c0c5ecab23a4.jpg',
 'test/49e9e9145a958803a9ba2e3f6e0a71ab.jpg',
 'test/44e58eb6267901d0eb286dd4e0c00aa2.jpg',
 'test/0e5df48c6a720cdce7bfcd8064e86f88.jpg',
 'test/a9c288da5899c4fbf6e19132f378eb55.jpg',
 'test/35001c8ad99f4aabb73e33d14a45ca22.jpg',
 'test/af367e0802a7f03e2238fe9b1340f987.jpg',
 'test/6d15ae3e88e32472a777752502f5ef61.jpg',
 'test/bc56f06cfe89a75adf5a9a386e1c1782.jpg',
 'test/593a9966e17ee94c46c271c43673dfaf.jpg',
 'test/be7943ac6e20ab4dff504c0040fee275.jpg',
 'test/e000b7b3b37659a771d0151dc453bc0a.jpg',
 'test/c272ac0b07e9b0e529f800a40355ed21.jpg',
 'test/2ac4e1705e5458991f6bfa8fb60dd2d8.jpg',
 'test/e7dc8cc599049ea9fa2a172c88646c57.jpg',
 'test/56d7b5e1713b034355e623419ded032d.jpg',
 'test/c5f16b38c8d99f043259ce1af6ca98f2.jpg',
 'test/84ccc86f9f73e172d9594f21410dab18.jpg',
 'test/fa7c8295fa34ce441d4dc8cbe6125a4c.jpg',
 'test/0e826c710afd789f8db9ff522a7a04c0.jpg',
 'test/b06a9fdb4e01719ba007ffb537058a26.jpg',
 'test/9ce856febb7e0ea4b9b377cc853f4897.jpg',
 'test/4f1f9ffad4d2bd2a41e780cb48f73109.jpg',
 'test/661be7952c33b332c31d96717c83b15a.jpg',
 'test/c856e6ac2e86c4c99e7395b89f496a02.jpg',
 'test/1b0766eaa16ea5ee3f0d9c287b321eaa.jpg',
 'test/96030bdaeca31a34c9055ad8176b4e37.jpg',
 'test/ca126228d8a1f637a6ad8fa79c2bfd23.jpg',
 'test/d895ea793ff7fbe318f0925469067029.jpg',
 'test/46658b82900b719509dab310b67a5578.jpg',
 'test/580f38c5f64221a2b0fcc4a823db2fb9.jpg',
 'test/fcef727e767ef68b3973bfd25ad41305.jpg',
 'test/f73c6b6891b3e40a6bc9dd26f4e65767.jpg',
 'test/22dfa94e131e840a76e4961c3455004b.jpg',
 'test/302d0e5183e88053e1e77cd81271bfd6.jpg',
 'test/b46e5c6e20f384eec6570c8845b7dd01.jpg',
 'test/b5b0af713147dbbaa08541c9d1d08af8.jpg',
 'test/4f76b5462fa3d1f77d8fa2f84c7c538b.jpg',
 'test/5b2d1ab24a9250bdea55819eb73e99b3.jpg',
 'test/e70c62f51defaa5295fe3e52099c4ce3.jpg',
 'test/bbd6ebf6cea000cf5df2c649b138959d.jpg',
 'test/f50cf15ef4c06e63d9483b48d7bead6b.jpg',
 'test/3b837a3cb2135ba3287d54f609b3519f.jpg',
 'test/1cb39487e071702fb2ac1a31be2d31d7.jpg',
 'test/d9f2e14d19d62503b1506e5974bc1da7.jpg',
 'test/23069233e9d9199635a5e645f8350915.jpg',
 'test/9d306df1a7045525b6c48593873b9b90.jpg',
 'test/cefe81faf30a75e1dee92b4832ab8bd7.jpg',
 'test/d88cb9fa369a935b04c272faac0a4152.jpg',
 'test/f538a1d1a9e50417ea346429ea3e940c.jpg',
 'test/8c5442d028fdf92119a23980f1ae2885.jpg',
 'test/b75d9cb98dc9bb5448632a96f8785cae.jpg',
 'test/51ba0fb4a151b32094020584e6326053.jpg',
 'test/197108bbd6364cece803e6177092c7ca.jpg',
 'test/ca105cda2bd4fada7dfc06b1c176ef2e.jpg',
 'test/b3a9aee55fa41f5a535502e90939455c.jpg',
 'test/d20bbe2bf10bbfbb5b77f5c6863a27bb.jpg',
 'test/bcf559a914a8fa20ebd5375c48edd8cf.jpg',
 'test/7a2c4ffdbebceeb7f19c602976f3fb0c.jpg',
 'test/f51f6aeea8a23b6bd62728fde8f04ad8.jpg',
 'test/c860dce3776ee42b790952ea992a7bc9.jpg',
 'test/b090e6fcf24ea6d5b6cdffbd7a9a7cab.jpg',
 'test/e35b90290702042d17ceee2aaf2d1475.jpg',
 'test/a2f259b5440aa56ab3977e23d02f82ed.jpg',
 'test/19811fd5f032d3f18aae650a3646e216.jpg',
 'test/2725e24b567a02ea282e22f99725697f.jpg',
 'test/2a83319c4aacda676534a6b77b2ceb20.jpg',
 'test/4846d3823de6201bb2ebc1d00421715a.jpg',
 'test/02e9084491b5bad9e905dfef50a85be7.jpg',
 'test/580af1906fb3472297e9b3c1d15ea969.jpg',
 'test/2b19d453784f8e911695d20503d20bc7.jpg',
 'test/a940379e403d5fd0d85f79731544ea2c.jpg',
 'test/8f9ddafd9fd5b651d8ad7a8e0fce41c9.jpg',
 'test/b0af8261078235519a15edf051e083b3.jpg',
 'test/32a0bd5889f4ffe8d663ee6b0e557da4.jpg',
 'test/c0fd1386f7f813543da5e3fe2ecd61fb.jpg',
 'test/3a4c5ff38cc789af065aaee7b0ac8363.jpg',
 'test/54b79cc5fddfa0727b6304f1bf7281ac.jpg',
 'test/e9ef6c9f1a1ad34c42b6595c18f164e2.jpg',
 'test/52e748929ab9aac3ea27c152960d089a.jpg',
 'test/3f27f73c0ced32f559bf8bca1322523e.jpg',
 'test/647b61e6cb127bed168320a691d6b24b.jpg',
 'test/f8f3c8903f904242b099f1fa4472ff02.jpg',
 'test/38a1b271ba7542f09ae044a2b0c19ad2.jpg',
 'test/3360969abaf458a84e7bfa91fb0602b9.jpg',
 'test/e864f3fc5d19aec4b7a5aa547b359c57.jpg',
 'test/2a984ccf9240459deaa90245b0bf9b59.jpg',
 'test/199a7be8b1ae7da2c6d2d7c7cbb0206d.jpg',
 'test/3a245a5668d75df9a2b6dcba5a36f690.jpg',
 'test/32724463924b96a5139bfdcbe5c0780b.jpg',
 'test/e6920cc0fd2e3099506d23761d9682e1.jpg',
 'test/6c6034c639ad37d3f0bf753d016e33a8.jpg',
 'test/066546afd3f63a7d3fd90c5a361ff527.jpg',
 'test/477aa485f4d3b8db998ddcbeac1cec65.jpg',
 'test/b0babdae714bac1f83ab6baca2ba9075.jpg',
 'test/f14ba73b3323b3c7cfc3ba359a6c4313.jpg',
 'test/95e3e9ba43d04118216b9fe20f132eaa.jpg',
 'test/54b9c175a57ae7c7e6882a7528c621b9.jpg',
 'test/61307a91fa0311f071c568faf1a372c3.jpg',
 'test/511103dc94637d0a979c5923b9e25027.jpg',
 'test/febfae88667a28d9df454cfd697eeddb.jpg',
 'test/1eb59d5b26bfd913ba0f8c14dfc4adbe.jpg',
 'test/ab5342deae5b0f582c86e25427d215ea.jpg',
 'test/f0341ba6b21465ece32d7df0ebff3048.jpg',
 'test/0068f3a21b159ece126a28580cdad7a0.jpg',
 'test/de6cc38e54a460dd34c53b74f022a8da.jpg',
 'test/b7e9b24556a5fd91ff59f0577a56c9a0.jpg',
 'test/0143aa47cc7cb5926cc32daf3a6a3b3d.jpg',
 'test/972060944d0f4c4e342eea4aad3a017a.jpg',
 'test/e78d3997b4e7f4abc1299f81b8e3b2d9.jpg',
 'test/9a82b96f7fe2263d7174057e519e4c79.jpg',
 'test/a59fa6f74528014c4ffe94e117868abe.jpg',
 'test/cc771940353adc5842ce38c86e1a4da4.jpg',
 'test/3d757ec9d84b8c1316d178357d538cf5.jpg',
 'test/8d3f8025509b52210d0eec149f29739f.jpg',
 'test/bae23d6cf1b3ee8299b254487b4ec86e.jpg',
 'test/ad04fa2b879c5675bbfe454d0a15881b.jpg',
 'test/8afca9586bc891d8b9e1512e4b07b861.jpg',
 'test/5b0e3a9551edcca11fcf565bb78d8c49.jpg',
 'test/e36ec4ab8218060660ec82fd6c4757a7.jpg',
 'test/6c9d748c5a472b7f2d51a8f08ac294a8.jpg',
 'test/fb4976cd57d2ddd224460ba2a4292264.jpg',
 'test/873a39759be91ca142ebc7c9f38ffe5d.jpg',
 'test/ae2407346c1574ea24682aab76898d80.jpg',
 'test/7f2ada1ec852e829d0e2bcb7cc7b50c0.jpg',
 'test/7443eb38a661a58a385c18c976c8aaa3.jpg',
 'test/dacf001ddba61650b7cc587b8db2f50e.jpg',
 'test/51ecc75144edc86a0b008cf96d5bdd02.jpg',
 'test/ed67035dba2de274aa95556038113c40.jpg',
 'test/d07116a8e1777f6d360aa434377f32f1.jpg',
 'test/9ca507d7d5c8f925605807a13c904173.jpg',
 'test/e64d56f012476f124591a22648114a37.jpg',
 'test/f1e0d9aa421de4c518baddf3d7bea598.jpg',
 'test/4fd4564ec712591906835e0ebed1987c.jpg',
 'test/9687e49924ab2fa2a60770d233706e39.jpg',
 'test/3f3910d53f0a1e88dba269a5a7037806.jpg',
 'test/16ba21d0aa8ebc2830260518f66efafc.jpg',
 'test/6bb30f53bb4dceec07af0558e0704201.jpg',
 'test/fa2f44a5e2c304e76f65bb9fa60ecb10.jpg',
 'test/cf0be966e83c9d7539f840d8e65a4978.jpg',
 'test/b7a8008f12df534faca9d5403fea0ec8.jpg',
 'test/0fb4de8ba53b256e5b66d432c347ba92.jpg',
 'test/31db860c64881a5ca12575d35268cfeb.jpg',
 'test/39bfe266cc37ee03a2d24f74021d31bd.jpg',
 'test/d99ef4375ab82f363df39631016a1d49.jpg',
 'test/07f36df95c5fc473f2fbf51c0929ee7d.jpg',
 'test/4b15093699eaedb468688caebc3145e2.jpg',
 'test/45fa1e1a64eec96e6990e7c24badc24e.jpg',
 'test/424637827b400b0cb2bda490d336c52e.jpg',
 'test/542e52bf36989c146cb1c6a7ef18e93a.jpg',
 'test/dd39ff72939c0445a76f0e7db9985f56.jpg',
 'test/9841057e1e4699918e264310f55fc000.jpg',
 'test/28f7fbb3750d3256de932c58000a4c33.jpg',
 'test/f409b8113b2c2ab861131c4bd1c0b029.jpg',
 'test/b4f81cada44103c6ac7d436b758e1c98.jpg',
 'test/c3c5d45616b0842fa7d36a41852f5e74.jpg',
 'test/d4ebbb48229e67e070d8edd22c32e979.jpg',
 'test/1af1c8b40ed015861a4ebdb67f21f7a3.jpg',
 'test/cbcd4e1befa019fdda0fdbfefad2e10b.jpg',
 'test/bc6221098549490043fdb1c65fa35866.jpg',
 'test/f390bb3bac972e70bc612dcf64651eb5.jpg',
 'test/4ef61842a22740d920ff041d3271731a.jpg',
 'test/b2edda24c8c845736aa185f348a6aa9d.jpg',
 'test/564c005818b5571083b75d4836d45049.jpg',
 'test/56e9e806e409775f6d292b66b8855b1e.jpg',
 'test/a88077bc7de1a3eb6a19d86a52f2658c.jpg',
 'test/de291f05facd9c7db8d4880a0c84263b.jpg',
 'test/6cc15e9d43e8a5c73ecd81da2b9f04fb.jpg',
 'test/c52b2fdcdb51ff990b5141181e2b43cb.jpg',
 'test/1edc9e9a84c538b03a4978186265974e.jpg',
 'test/cb54c8c517dc12da27e5a3b72f1a1411.jpg',
 'test/7e90f58b3b345fd50ac313cc1087afda.jpg',
 'test/99c85e92f484f931d0fcccf6e062c73d.jpg',
 'test/5c6eaec7a23200143256a4bd82e79e6e.jpg',
 'test/caf91765bdef06d87603d33350dfadf3.jpg',
 'test/126ee1ee0d0a37e1f5980a73e92703f3.jpg',
 'test/e4729bf465eac43afb6b04687d4703c3.jpg',
 'test/329754c8127a0e2b35ec0a0fcf235d16.jpg',
 'test/dc24cbb988ae248df2c37cb9b475f44d.jpg',
 'test/93f27a94cf69f02c3b96489adc279249.jpg',
 'test/aabc9f866215259e5f99254bc705c1ef.jpg',
 'test/2464089ba3fc5696013a7cc10e3052e1.jpg',
 'test/db92f1f6e6bce5f607db4469bef612ab.jpg',
 'test/dc2d35120836b3937015654a1e2c02b3.jpg',
 'test/d784e8537253a499ce0fce9d400eeb44.jpg',
 'test/420ca2f011341d6e70558c6e2b46b258.jpg',
 'test/d16f5acab90d41f1ac0014944027d490.jpg',
 'test/57febab02547933c7fa21ee086bd900c.jpg',
 'test/605a123373fd60bb529bc09b24a6abaa.jpg',
 'test/9312cebcf7f722a63903c5e8bcad320a.jpg',
 'test/b2fc97a2fc3f2272ce6df6babdd1b359.jpg',
 'test/6705e29c64d4949dfa72e0cb9e3bb950.jpg',
 'test/e09f4ff3f7acee994812650a2fc7edef.jpg',
 'test/59a4b8eaea7c65ef63bb758029c65fd4.jpg',
 'test/2819f3439652a372bbda204e2a146be8.jpg',
 'test/470523a2a1b1a577b84a0a9eb1353fb1.jpg',
 'test/f85c38afe1945e2c1f70009c2da2b770.jpg',
 'test/3e764ad13028326c980cdb1263e70ef0.jpg',
 'test/1342e9e4ae5b8823d9b8e4a673578bb9.jpg',
 'test/9a1380f07d84ac412e15adece00c507f.jpg',
 'test/40bc48838c2bf936ac2f207cf02c861f.jpg',
 'test/1c082570531b3fb68e82f06695d89de8.jpg',
 'test/664ac4d2dbb5a629a71513d1f933fbac.jpg',
 'test/5032499be24932c254003baaecc7fb3a.jpg',
 'test/acfd75346f5e70c83063bfce88bf6dbf.jpg',
 'test/6c5cf796c6e750b9cd15188b8959c132.jpg',
 'test/17b19a43d3850f943f4fe414be7d7356.jpg',
 'test/2d654cb8ab66ea02913622ed3786d4de.jpg',
 'test/3f749108e04e5a7ab35357cb0e501aac.jpg',
 'test/7dfa290883a3556ea561bf07bbe8ae1e.jpg',
 'test/c946d2b2d88cf4a5ae51feb8038aa8e5.jpg',
 'test/5b20745c9fe0e11e8c5037fc56542f34.jpg',
 'test/d9b0c0bc4de8b19e3452fc477ebdf5a6.jpg',
 'test/a1d8fee68196a36dbbb6cc703d80e812.jpg',
 'test/a62f5e5d7278699eefc195d747d71b7a.jpg',
 'test/c5ebdbaf77a7d833edfde7061bbb21d8.jpg',
 'test/7e29d82da70eb06e523b5553f01ed04f.jpg',
 'test/dc110cfb9e242562f5ad75391594832d.jpg',
 'test/2c7aec6066d75ec322f281ad587617f1.jpg',
 'test/26ce5eec1bde60d336d8ca2b3078e313.jpg',
 'test/57fffed7777ffd1ee7e712a98e1c58e4.jpg',
 'test/9d6923ebe18f316321de8b27da18ed5a.jpg',
 'test/68a99a4ccee81282b25e3b23e6cddb67.jpg',
 'test/0d6909043999ac138c3ceaaa064ff715.jpg',
 'test/e18fbb12037c297b90642e99073cd6b4.jpg',
 'test/c856e2561c1f0e9fcc96fcdce6b5cb10.jpg',
 'test/c15245145013896dd40a5fc301baf36d.jpg',
 'test/670e960de105f1ee4b65dfdaaa325998.jpg',
 'test/a5b2f38489741fdb7bff85cc2b207f90.jpg',
 'test/10026d03b0105b2066cd1f9e1b1d17fa.jpg',
 'test/c552603df0bcc250879fa3f29a8ec8ef.jpg',
 'test/af0a63ceff8e64c65e48ccd7e9500499.jpg',
 'test/91faba2e7bd694aec44c6d91e386445b.jpg',
 'test/1d2a53a5735601ceda45195d951327ae.jpg',
 'test/e4c49d7e028965d3504b0862633464c3.jpg',
 'test/01c5377f30398c17dd5b23a32fa66760.jpg',
 'test/142cd6e7fec3cb25f5297258999829b9.jpg',
 'test/e9615e7f30ffcf6d705ce9cbcb6d688c.jpg',
 'test/986703c7c88316dc55954b7c7922cbeb.jpg',
 'test/54b615d1fb355de9901bdc97d43f824c.jpg',
 'test/2fa13e03954dee3e1816a5b4ee1bb75b.jpg',
 'test/90748aa0fd5f66a4def61ebef27baedd.jpg',
 'test/80f31faa916d7f1b474b89450ba6a2f4.jpg',
 'test/c3dbb4497a3245b3059535328af43903.jpg',
 'test/76680349c01ea89d2ca18f90b0776542.jpg',
 'test/d4592b2ce3f4b01ccf09e3dd066366cf.jpg',
 'test/0770fe4187dd10984ea1afa07757dc8c.jpg',
 'test/a5835d9c54e34fd6712b888a90a23074.jpg',
 'test/6f5763812fb89bb9cf9ea49f5c59958f.jpg',
 'test/852e1b3c162e231c41a5476368535d69.jpg',
 'test/7c362d4f6528a237f44117c7424d4975.jpg',
 'test/76130b7b1eae72e002512087b22cc938.jpg',
 'test/201bdc6f7a8b0fde297d1291fcd31380.jpg',
 'test/3f472a8e9b1547a36df792a0e183cdb4.jpg',
 'test/3a71473b748a1c7cdb8d4546a4bff503.jpg',
 'test/627d9f5cf30cf361de934ff0c134fc74.jpg',
 'test/8bcd9b2e171111039c45518139d0417d.jpg',
 'test/fa85d9951d7996c4c92ce5dc41d87dcd.jpg',
 'test/c028ba7ab6a87d784c34d1148ee9c1d2.jpg',
 'test/83aa8e95141a9f40672475a02f3b47a6.jpg',
 'test/d5e7ba067d315d6c965a0d8ed2de1238.jpg',
 'test/4ecbc5bb44b00a168f353df336c4480e.jpg',
 'test/fa1b7fcead34bd69f791c89c9b989adb.jpg',
 'test/67dc12e769a11c880f5d23c26f942ce6.jpg',
 'test/d6209ea7315be8bc17786b07fb795d89.jpg',
 'test/ecb6362d105c0cb84d8e69cfd9b8d0b5.jpg',
 'test/4ff5971ec21c26628e8f1684873314fd.jpg',
 'test/421740219b36fc0bd5d5f043f7c9df62.jpg',
 'test/03b4aee397e5dacdc21da01e5a5beeee.jpg',
 'test/416c3f35c567dfd6565c838a1d0be50e.jpg',
 'test/91d861224055c595b63e569d41426637.jpg',
 'test/6bdcf60426577d707406e06dec180e4b.jpg',
 'test/84d5aa02598e4e2abba65c9b2ad04745.jpg',
 'test/6450f115eb719f57695329d8af7f13e4.jpg',
 'test/cedd6b0da3b4070ff7c7a185b85c7504.jpg',
 'test/3706f3983a0e8ad6772d343796ec8c06.jpg',
 'test/4b50883ec6c5c7dbc33457f6f387c0c7.jpg',
 'test/5923343e2a6d849f7426da3a1afb5db4.jpg',
 'test/aede98bbc83ac1479458ad747c980286.jpg',
 'test/d6d1131779e16248dcc207f4997b2930.jpg',
 'test/2175a4fb989d3932787d3300e0d80989.jpg',
 'test/81ec6d2ad40d358b90c3dcc7084db3b4.jpg',
 'test/87ad1f3a3f053c5134027821af3fce66.jpg',
 'test/00d3ae5326883e4330fd4af3db8f2997.jpg',
 'test/a517beb4183be5a0b0140a4bee9cd47e.jpg',
 'test/94ef474be9e41fcf6a105312216607a6.jpg',
 'test/0b69e164a553cb6397e0a4d15d8539d2.jpg',
 'test/02ea6166d772f24caf112171fabd1011.jpg',
 'test/dc78472e337f612c787c9fb524ff9f48.jpg',
 'test/c3e5383efc4eeefefb6ee31934d2520b.jpg',
 'test/25e2efdc61780749685a756a3e2ef3cf.jpg',
 'test/5ac3631e75ecab48b609c4930ef1ef51.jpg',
 'test/35b4b91f00ebe414b79e1290c73c0676.jpg',
 'test/53e597b4117cd2fee0d78e1428e865fa.jpg',
 'test/0ecfbc51c3d5a40221c92a3c54b664b3.jpg',
 'test/0069b1cc4546fc98f84f981bf9a0696a.jpg',
 'test/1b410af3a3965265af9b4c1153d32630.jpg',
 'test/79d706c6497c057a29485091a3e21f0b.jpg',
 'test/c2c089c15ef388953c1a47aa25d63ceb.jpg',
 'test/275a39065474315c6e6e6fd64dc90283.jpg',
 'test/8584099bbb10d51cc5b88ef5c8645198.jpg',
 'test/396ab128eb1fc97113fbd168cb7cec5b.jpg',
 'test/92fe075819116134c21a661ad542a0fd.jpg',
 'test/8e885b6ac52501854d470cc27e9f9a0a.jpg',
 'test/3f0b9f56f43ebca29b18b8a536240fdd.jpg',
 'test/ffadae851b94ece57602da7edf72d689.jpg',
 'test/84231fc9d72391dd4fbea9a0935c4a6f.jpg',
 'test/e381c5fcf1420985b20117e4bc7d38cd.jpg',
 'test/a02a2f1ea51191fc24da9785456457dd.jpg',
 'test/55df884100dc84946a99925a3c03df2f.jpg',
 'test/1b85eb780c54dd0454ad01670d0ada60.jpg',
 'test/e3a55cc9c91da472abbced51d98d6ff6.jpg',
 'test/a148036c394ddb2c6d23f67a5f9e548c.jpg',
 'test/f02b0bb575f8dd86c63ab38df20483ba.jpg',
 'test/cf9045c5f367cc2d012bf545f0a56b52.jpg',
 'test/c16b48dbb10bd4cb6ce6103e64a89be1.jpg',
 'test/0fe8cd548b03f238fc63415d15228849.jpg',
 'test/4f530d1bada6499dd3d3fb5a8f208564.jpg',
 'test/72acff1b5f93e6f82e785c3f8fcbcb84.jpg',
 'test/7e7745195510838b2e9f08492ab4b473.jpg',
 'test/42feb15909b1a7da5d85bc1a2baafe47.jpg',
 'test/4068db24e52f8d67c667d6b035036b19.jpg',
 'test/20654ff0191d11ccbcde05f4204fe3b3.jpg',
 'test/616c217716688c8aec897cfb3de0efe7.jpg',
 'test/1cb979e6c2f03ac6f708bcb7f0afb1e0.jpg',
 'test/5e593fd2bbde69cc3a30d7cdec1663c6.jpg',
 'test/a07211e87a6f435fec0c126dee3f9530.jpg',
 'test/afe725ee66051fb502bd5816b4ba7e13.jpg',
 'test/9a66cdd070259faaafc7be8fc5d6597b.jpg',
 'test/c812195a6d15bbc6e85d412da3f777f5.jpg',
 'test/118784064864f82da57ee41ede5fd59b.jpg',
 'test/39a387f0d5fb9ecc7f511c3c3a691699.jpg',
 'test/5fd4c3dad6367ee986e2f9c4a5358483.jpg',
 'test/3464ef03f85da77144339ff450ba0807.jpg',
 'test/5e12bf10f925b2167704ac491e22edda.jpg',
 'test/59b07b46f717691187c603b9da6d4811.jpg',
 'test/46a4c593405150f4cebb888464e64307.jpg',
 'test/a348eabfbbdc91423f1a8009f01fd16c.jpg',
 'test/982cc4dcee6bfd3e1bbef7c72ab526d0.jpg',
 'test/6b95471c68c0ee1cb89a68d03e277245.jpg',
 'test/38a54d837294a3fdb769867cb264488c.jpg',
 'test/f0933ef7831649c79490ebb34de07a01.jpg',
 'test/f0fc06a2b2123325e34a2450d3202853.jpg',
 'test/b49d77d44fff249f62118af19f3468c2.jpg',
 'test/7675569334fde4cfb2f518d02faa4f38.jpg',
 'test/716f2ff3f67f472f0e425aa204d8682a.jpg',
 'test/00bbbcb2bf285af6304bd4da0c10299e.jpg',
 'test/0518d41fa95b141f8267a3d2e2cef756.jpg',
 'test/3e0b2958e88c6901d295626d0f7c25dc.jpg',
 'test/5f7eaeb86bdabd25c256570c991ed734.jpg',
 'test/db1da6c0ef810c2341bd735458d7c18e.jpg',
 'test/0d995d97a3a9b34790f46a4d39cab12a.jpg',
 'test/28a0203fe6128b2d1eff82d9ed494fb3.jpg',
 'test/28145c91d2064f10ed812db12b26cab3.jpg',
 'test/5c53ff7f378bb31dd09bf47e3e915339.jpg',
 'test/c3a93d3a0a8bb644e457776cc305d3ac.jpg',
 'test/00559f56aab7e0a7749220f6aed65162.jpg',
 'test/fd71821dd0f03a287edd590a2a02ff7c.jpg',
 'test/a561fb8f5db3f033a2d01fefd097c94e.jpg',
 'test/26ca2bf1465b5bd13739b278f4be013b.jpg',
 'test/0c07dc94a848d6628d118c6934773a1e.jpg',
 'test/01b7405f4c920e98e0a462f3a99b542c.jpg',
 'test/8b3a2436fbf887abae6d42c52aec4b8d.jpg',
 'test/31e76602f9d2066febf0a5c743dd59f9.jpg',
 'test/df38352b1f41c92d6750b87b55488ed4.jpg',
 'test/b44cbb609e863c0aa906322507df3e3c.jpg',
 'test/2589cf6d912df483893fd7687594980b.jpg',
 'test/9a09f552db9297e798c695e23e2ce493.jpg',
 'test/a719286ffc75674cacf58b983f16945d.jpg',
 'test/2c4aab0a71b7d43de83e2b3dd393b9a6.jpg',
 'test/c94cb08d0725ef8fe7647266def87b35.jpg',
 'test/99f7f82807162a4131b48724b58056c8.jpg',
 'test/9b0f278136e7d37795bda08bd1ae5ccc.jpg',
 'test/0a053ff8908375e9579ead9f3965e0ce.jpg',
 'test/9021db6be87fcd46c9815baa5ddc0637.jpg',
 'test/22f847ce70cd839a1c83b4730958c423.jpg',
 'test/884425b978a7291221409afa5a0ba662.jpg',
 'test/1d7aad616c35bdeadd115881c96c0f7d.jpg',
 'test/f495e4dbc5b2bc6230bca03970d37876.jpg',
 'test/c0379c60746dbc0e2498fdd0a36ba080.jpg',
 'test/1e948d3e5358f0d736bd9648b5558b13.jpg',
 'test/fe646cdb7b5f1e8e7dc704e8db436043.jpg',
 'test/f687b2ec96d346e2c88934855f3c3b12.jpg',
 'test/e6353a9420e1e529b6c20b9414786ae7.jpg',
 'test/372390ca9cf85da9f02e5225d3a052b1.jpg',
 'test/76e0cd14e2485f3b87abd6b7363400e8.jpg',
 'test/26ba83e1f1e1e8e7910c3a58405147e6.jpg',
 'test/5b9ffbb373a5003493c9379e8e75b7fd.jpg',
 'test/a16ee73695f5b2d2c05447ce21b38365.jpg',
 'test/606f8ad835ecd162dad739759146d4b5.jpg',
 'test/a8b4b6acc17dfe796c43e73bd9175a09.jpg',
 'test/14cc27d72512eded5b580e642fecbe95.jpg',
 'test/8608b39ca999c8ff31e0f032a2576908.jpg',
 'test/1d7ce40461c226bddd0bc52c59f4e704.jpg',
 'test/f633f32982dec362ecbf2e265dcff6ca.jpg',
 'test/3740097cc690e3a0ef05e078cc6a37c5.jpg',
 'test/555ec0f324fd1deac1a725b15a03d2cc.jpg',
 'test/298e0268f4437cd652c01d694edcbd7e.jpg',
 'test/211746044fe4263ea5821fe2ecbbdd06.jpg',
 'test/b5f8d1f0aaad28634e56139bd630de97.jpg',
 'test/b5b946550f399499552b901d2eee18d6.jpg',
 'test/e9fe358382731f9288768526be01c950.jpg',
 'test/819632ba0fb41691945bd56bfadc0f09.jpg',
 'test/90e3c749b540a5399091d9aa79c6498f.jpg',
 'test/117ea9f58dbe47140f9f1c3297b0a4b1.jpg',
 'test/5203c4f8d8ef803254935e52c4ed3f13.jpg',
 'test/6b81ab25f81f389adf310e0482eeabe5.jpg',
 'test/a7c5c326cea8caee677f07df913fd570.jpg',
 'test/de15c21ba0a1f139d26223d5e2b09703.jpg',
 'test/04378b6550e324c2edfe51a23ed2f2ee.jpg',
 'test/704a957148a1dc163174d05187205fab.jpg',
 'test/9f1cbbf0833d8682b1743a2d398c86ee.jpg',
 'test/42c10d2fdabe41a8d0f3120025737fab.jpg',
 'test/8600c6a30401005de8d7f54876520992.jpg',
 'test/2d6b6491c6376e487f40c222079950ba.jpg',
 'test/bb0c7d7af4bdc0d3646afaf1339a15f2.jpg',
 'test/63134a0e3c94d21aed06babc33c226bc.jpg',
 'test/703e3342c703cc5c3b68f73a846eccdf.jpg',
 'test/f080ee2429dccf56d2693fb8d3235010.jpg',
 'test/118e6d01dfdf00c1fc90a52501295d6a.jpg',
 'test/d12ddae0ab2ec9c7948e410fc03c4e5d.jpg',
 'test/ca8bf19cb287abbbf9cd8e1d8ea41355.jpg',
 'test/89c6a8ca76992999460790943189ce26.jpg',
 'test/9de87aba130f43ecffe870790873e219.jpg',
 'test/3635d8ca924240e41c75386c4231bef1.jpg',
 'test/04790ec052c44f082c7f99b1ff26a78c.jpg',
 'test/62ec35974e0d3db7e924eb04f6a011e6.jpg',
 'test/4c108b9f10d8323c7d9c878880b094d6.jpg',
 'test/d7a8e33d60c6184bdedf9e2e8865199d.jpg',
 'test/304d7234be25057d44b86d1fbb5468c7.jpg',
 'test/9fe707aae29bcfa2933dee07013c678d.jpg',
 'test/c0f9fac1d3042e9abca15c833b5bcca6.jpg',
 'test/75ce08b9d3a16b71762af327c1796201.jpg',
 'test/bd3002c2c3e4f1f7a7a118b89f11228d.jpg',
 'test/69baecdfcf9b0e8bfa903d969f406a58.jpg',
 'test/301d047419ce77454409aa35c6bca767.jpg',
 'test/06937730f6c9fbf37d2875c5f00940e3.jpg',
 'test/927b66d0f673bf87610927330f7baec4.jpg',
 'test/74af2024054a120cb0fa0eb64bdcab88.jpg',
 'test/5dbae9788a740ea9b923303391ceeaa3.jpg',
 'test/dae9fd18836d8df20989ef0101771d4b.jpg',
 'test/72575cece5ba48295f85cebabe38acfe.jpg',
 'test/df624595296500c98e3a1bf4d9ea917b.jpg',
 'test/ef119ef06b97f22d32dbd5cfc08bf60c.jpg',
 'test/a40573873937250a9cda0defa8667bab.jpg',
 'test/ec5dffe4232cc203b4332d18952d415d.jpg',
 'test/21edf3fbbc677848c32043bd1e429e5e.jpg',
 'test/9b9247f34e7d34cb278063bdf724d542.jpg',
 'test/ad50cc30b8816d5006c850e67ef53b94.jpg',
 'test/92c2d8a341bb7628e74f16a975bdf6ac.jpg',
 ...]

In [60]:
log_preds, y = learn.TTA(is_test=True) # use test dataset rather than validation dataset
probs = np.mean(np.exp(log_preds),0)
#accuracy_np(probs, y), metrcs.log_loss(y, probs) # This does not make sense since test dataset has no labels


                                             

In [61]:
probs.shape # (n_images, n_classes)


Out[61]:
(10357, 120)

In [62]:
df = pd.DataFrame(probs)
df.columns = data.classes

In [63]:
df.insert(0, 'id', [o[5:-4] for o in data.test_ds.fnames])

In [64]:
df.head()


Out[64]:
id affenpinscher afghan_hound african_hunting_dog airedale american_staffordshire_terrier appenzeller australian_terrier basenji basset ... toy_poodle toy_terrier vizsla walker_hound weimaraner welsh_springer_spaniel west_highland_white_terrier whippet wire-haired_fox_terrier yorkshire_terrier
0 2c4fdb0f1d0545356e20bf11b166a98b 5.820287e-06 0.000002 1.737734e-04 3.029088e-06 1.031139e-05 3.466857e-06 2.471462e-04 4.127410e-04 2.630584e-04 ... 8.445057e-06 1.066887e-06 9.554161e-06 8.361259e-06 2.404504e-06 1.225265e-04 3.707241e-05 4.401996e-06 5.168860e-06 2.361098e-06
1 026fd54ef87fdc261fb0fb49cddfddd1 2.719357e-06 0.000245 8.557010e-05 1.769983e-05 1.019662e-04 4.053642e-05 1.249594e-05 1.151144e-03 2.689990e-03 ... 1.046294e-06 2.017398e-04 1.031546e-05 8.353627e-05 1.921457e-05 1.853243e-05 7.028652e-05 4.791903e-03 8.007880e-06 1.466289e-05
2 3e2e0f18aff3a28572255a2867751996 4.145559e-09 0.999994 1.244224e-09 8.346750e-10 1.249642e-09 8.057041e-10 6.060722e-10 3.528369e-10 1.275126e-09 ... 2.491869e-09 6.446658e-11 1.877562e-09 2.020890e-09 4.787128e-11 1.062971e-09 2.687409e-10 1.368192e-08 1.776165e-10 1.443382e-09
3 b964a6ca60f81c19e84ad0aaa9ed6f88 7.276486e-06 0.000040 5.571208e-06 9.757241e-05 3.750862e-07 8.654023e-03 2.086477e-06 1.029557e-06 4.778385e-06 ... 7.112404e-07 1.087833e-06 7.423091e-07 1.987889e-07 6.259081e-07 3.205392e-05 5.702233e-07 3.048045e-06 2.394480e-05 1.373890e-06
4 f5bdb338a1290c979bb8ff9071c3edd4 3.355651e-04 0.000428 3.679552e-03 9.967716e-05 1.433017e-04 3.494530e-04 2.055337e-05 2.510230e-05 8.328364e-06 ... 1.753572e-05 3.833155e-05 6.894009e-04 1.370232e-04 1.024322e-02 1.712892e-05 2.487893e-05 5.481333e-03 7.777982e-06 6.791910e-05

5 rows × 121 columns


In [65]:
SUBM = f'{PATH}/subm/'
os.makedirs(SUBM, exist_ok=True)
df.to_csv(f'{SUBM}subm.gz', compression='gzip', index=False)

In [66]:
FileLink(f'{SUBM}subm.gz')




Individual prediction


In [67]:
fn = data.val_ds.fnames[0]
fn


Out[67]:
'train/000bec180eb18c7604dcecc8fe0dba07.jpg'

In [68]:
Image.open(PATH + fn).resize((150, 150))


Out[68]:

In [69]:
# Method 1.
trn_tfms, val_tfms = tfms_from_model(arch, sz)
ds = FilesIndexArrayDataset([fn], np.array([0]), val_tfms, PATH)
dl = DataLoader(ds)
preds = learn.predict_dl(dl)
np.argmax(preds)


Out[69]:
19

In [70]:
learn.data.classes[np.argmax(preds)]


Out[70]:
'boston_bull'

In [71]:
# Method 2.
trn_tfms, val_tfms = tfms_from_model(arch, sz)
im = val_tfms(open_image(PATH + fn)) # open_image() returns numpy.ndarray
preds = learn.predict_array(im[None])
np.argmax(preds)


Out[71]:
19

In [ ]: